Commit cd83eda8 by Antti Tönkyrä

I18N, stuff...

1 parent 547bf0fb
......@@ -17,6 +17,7 @@ import fi.codecrew.moya.enums.apps.ContentPermission;
import fi.codecrew.moya.enums.apps.EventPermission;
import fi.codecrew.moya.enums.apps.LicensePermission;
import fi.codecrew.moya.enums.apps.MapPermission;
import fi.codecrew.moya.enums.apps.NetworkAssociationPermission;
import fi.codecrew.moya.enums.apps.PollPermission;
import fi.codecrew.moya.enums.apps.ShopPermission;
import fi.codecrew.moya.enums.apps.SpecialPermission;
......@@ -195,6 +196,10 @@ public class MenuBean implements MenuBeanLocal {
adminEventCards.addPage(menuitemfacade.findOrCreate("/shop/shopToUser"), null).setVisible(false);
adminEventCards.addPage(menuitemfacade.findOrCreate("/shop/assocToUser"), null).setVisible(false);
MenuNavigation adminAssociation = adminmenu.addPage(null, null);
adminAssociation.setKey("topnavi.adminassoc");
adminAssociation.addPage(menuitemfacade.findOrCreate("/networkassociation/index"), NetworkAssociationPermission.CAN_ADMINISTER_ASSOCIATIONS);
// shop
MenuNavigation adminshop = adminmenu.addPage(null, null);
adminshop.setKey("topnavi.adminshop");
......
......@@ -4,6 +4,7 @@ import java.util.Calendar;
import java.util.HashSet;
import java.util.List;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
......@@ -41,15 +42,20 @@ public class NetworkAssociationBean implements NetworkAssociationBeanLocal {
@EJB
private EventBean eventBean;
@EJB
private PermissionBean permissionBean;
public NetworkAssociationBean() {}
@Override
@RolesAllowed(NetworkAssociationPermission.S_CAN_ADMINISTER_ASSOCIATIONS)
public List<NetworkAssociation> getStatusByIPAndMAC(String ip, String mac) {
return networkAssociationFacade.findByIPAndMAC(eventBean.getCurrentEvent(), ip, mac);
}
@Override
@RolesAllowed(NetworkAssociationPermission.S_CAN_ADMINISTER_ASSOCIATIONS)
public List<NetworkAssociation> getActiveAssociations(boolean activatePending) {
if(activatePending)
activatePendingAssociations();
......@@ -57,7 +63,18 @@ public class NetworkAssociationBean implements NetworkAssociationBeanLocal {
return networkAssociationFacade.findByStatus(eventBean.getCurrentEvent(), NetworkAssociationStatus.ACTIVE);
}
@Override
@RolesAllowed(NetworkAssociationPermission.S_CAN_ADMINISTER_ASSOCIATIONS)
public NetworkAssociation tryAssociate(String ip, String mac) {
EventUser eu = permissionBean.getCurrentUser();
HashSet<IAppPermission> userPerms = buildPermsFor(eu);
NetworkAssociation nasc = associate(eu, userPerms, null, ip, mac);
return nasc;
}
@Override
@RolesAllowed(NetworkAssociationPermission.S_CAN_ADMINISTER_ASSOCIATIONS)
public NetworkAssociation tryAssociate(String username, String password,
String ip, String mac, String code, boolean codeRequired)
throws Exception {
......@@ -68,24 +85,7 @@ public class NetworkAssociationBean implements NetworkAssociationBeanLocal {
NetworkAssociation association;
HashSet<IAppPermission> userPerms = new HashSet<>();
if (authUser.getUser().isSuperadmin()) {
// Iterate through all permissions & add
for (BortalApplication app : BortalApplication.values()) {
for (IAppPermission perm : app.getPermissions()) {
userPerms.add(perm);
}
}
} else {
for(Role r : userBean.localFindUsersRoles(authUser)) {
for(ApplicationPermission appPerm : r.getPermissions()) {
IAppPermission iap = appPerm.getPermission();
if(!userPerms.contains(iap)) {
userPerms.add(iap);
}
}
}
}
HashSet<IAppPermission> userPerms = buildPermsFor(authUser);
if(!userPerms.contains(NetworkAssociationPermission.CAN_ASSOCIATE))
throw new Exception("USER_HAS_NO_ASSOCIATE_PERMISSION");
......@@ -134,6 +134,45 @@ public class NetworkAssociationBean implements NetworkAssociationBeanLocal {
return association;
}
@Override
@RolesAllowed(NetworkAssociationPermission.S_CAN_ADMINISTER_ASSOCIATIONS)
public List<NetworkAssociation> getPendingAssociations() {
return networkAssociationFacade.findByStatus(eventBean.getCurrentEvent(), NetworkAssociationStatus.PENDING);
}
@Override
@RolesAllowed(NetworkAssociationPermission.S_CAN_ADMINISTER_ASSOCIATIONS)
public void dropAssociationById(Integer associd) {
NetworkAssociation na = networkAssociationFacade.find(associd);
if(na.getEvent().equals(eventBean.getCurrentEvent())) {
na.setModifyTime(Calendar.getInstance());
na.setStatus(NetworkAssociationStatus.EXPIRED);
}
}
private HashSet<IAppPermission> buildPermsFor(EventUser authUser) {
HashSet<IAppPermission> userPerms = new HashSet<>();
if (authUser.getUser().isSuperadmin()) {
// Iterate through all permissions & add
for (BortalApplication app : BortalApplication.values()) {
for (IAppPermission perm : app.getPermissions()) {
userPerms.add(perm);
}
}
} else {
for(Role r : userBean.localFindUsersRoles(authUser)) {
for(ApplicationPermission appPerm : r.getPermissions()) {
IAppPermission iap = appPerm.getPermission();
if(!userPerms.contains(iap)) {
userPerms.add(iap);
}
}
}
}
return userPerms;
}
private void activatePendingAssociations() {
List<NetworkAssociation> netAssocs = networkAssociationFacade.findByStatus(
......@@ -210,5 +249,5 @@ public class NetworkAssociationBean implements NetworkAssociationBeanLocal {
private Place resolvePlaceFromCode(String code) {
if(code == null) return null;
return barcodeBean.getPlaceFromTextCode(code);
}
}
}
......@@ -17,4 +17,10 @@ public interface NetworkAssociationBeanLocal {
List<NetworkAssociation> getActiveAssociations(boolean activatePending);
NetworkAssociation tryAssociate(String ip, String mac);
List<NetworkAssociation> getPendingAssociations();
void dropAssociationById(Integer associd);
}
......@@ -8,12 +8,14 @@ public enum NetworkAssociationPermission implements IAppPermission {
CAN_SHUFFLE_IN_GROUP,
CAN_ASSOCIATE,
CAN_ASSOCIATE_MANY_PER_PLACE,
CAN_ADMINISTER_ASSOCIATIONS,
;
public static final String S_OVERRIDE_PLACE_REQUIREMENT = "NETWORKASSOCIATION/OVERRIDE_PLACE_REQUIREMENT";
public static final String S_CAN_SHUFFLE_IN_GROUP = "NETWORKASSOCIATION/CAN_SHUFFLE_IN_GROUP";
public static final String S_CAN_ASSOCIATE = "NETWORKASSOCIATION/CAN_ASSOCIATE";
public static final String S_CAN_ASSOCIATE_MANY_PER_PLACE = "NETWORKASSOCIATION/CAN_ASSOCIATE_MANY_PER_PLACE";
public static final String S_CAN_ADMINISTER_ASSOCIATIONS = "NETWORKASSOCIATION/CAN_ADMINISTER_ASSOCIATIONS";
private final String fullName;
private final String key;
......
......@@ -27,8 +27,10 @@
</h:outputText>
</p:column>
<p:column headerText="#{i18n['networkassociation.create_time']}">
<h:outputText value="#{activeAssoc.eventUser.user.nick}" />
<p:column headerText="#{i18n['networkassociation.user']}">
<h:link outcome="/useradmin/edit" value="#{activeAssoc.eventUser.user.nick}">
<f:param name="userid" value="#{activeAssoc.eventUser.user.id}" />
</h:link>
</p:column>
<p:column headerText="#{i18n['networkassociation.ip_address']}">
......@@ -44,17 +46,55 @@
</p:column>
<p:column headerText="#{i18n['networkassociation.action']}">
PRESSME
<p:commandButton value="#{i18n['networkassociation.drop_association']}" action="#{networkAssociationView.dropAssociation(activeAssoc.id)}" update="@form" immediate="true"/>
</p:column>
</p:dataTable>
<h1>#{i18n['networkassociation.pending_associations']}</h1>
<p:dataTable var="activeAssoc" value="#{networkAssociationView.pendingAssociations}">
<p:column headerText="#{i18n['networkassociation.create_time']}">
<h:outputText value="#{activeAssoc.createTime.time}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</p:column>
<p:column headerText="#{i18n['networkassociation.modify_time']}">
<h:outputText value="#{activeAssoc.modifyTime.time}">
<f:convertDateTime pattern="#{sessionHandler.datetimeFormat}" timeZone="#{sessionHandler.timezone}" />
</h:outputText>
</p:column>
<p:column headerText="#{i18n['networkassociation.user']}">
<h:link outcome="/useradmin/edit" value="#{activeAssoc.eventUser.user.nick}">
<f:param name="userid" value="#{activeAssoc.eventUser.user.id}" />
</h:link>
</p:column>
<p:column headerText="#{i18n['networkassociation.ip_address']}">
<h:outputText value="#{activeAssoc.ip}" />
</p:column>
<p:column headerText="#{i18n['networkassociation.mac_address']}">
<h:outputText value="#{activeAssoc.mac}" />
</p:column>
<p:column headerText="#{i18n['networkassociation.place']}">
<h:outputText value="#{activeAssoc.place.name}" />
</p:column>
<p:column headerText="#{i18n['networkassociation.action']}">
<p:commandButton value="#{i18n['networkassociation.drop_association']}" action="#{networkAssociationView.dropAssociation(activeAssoc.id)}" update="@form" immediate="true"/>
</p:column>
</p:dataTable>
<br />
<h:panelGrid columns="3">
<h:outputText value="#{i18n['networkassociation.ip_address']}" />
<h:outputText value="#{i18n['networkassociation.mac_address']}" />
<h:outputText value="" />
<p:inputText style="width: 100%;" validator="#{networkAssociationView.validateIP}"/>
<p:inputText style="width: 100%;" validator="#{networkAssociationView.validateMAC}"/>
<p:commandButton value="#{i18n['networkassociation.create_association']}" action="#{networkAssociationView.createAssociation}"/>
<p:inputText style="width: 90%;" validator="#{networkAssociationView.validateIP}" value="#{networkAssociationView.ipAddress}"/>
<p:inputText style="width: 90%;" validator="#{networkAssociationView.validateMAC}" value="#{networkAssociationView.macAddress}"/>
<p:commandButton value="#{i18n['networkassociation.create_association']}" action="#{networkAssociationView.createAssociation}" update="@form"/>
</h:panelGrid>
</h:form>
</ui:define>
......
......@@ -232,17 +232,17 @@ resetMail.username = Username
resetmailSent.body = Email has been sent containing a link where you can change the password.
resetmailSent.header = Email sent
submenu.NotImplementedYet = Not implemented
submenu.admin.adduser = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.admin.adduser.index = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.frontpage = Frontpage
submenu.info.incoming = Incomingview
submenu.info.index = Infon\u00E4kym\u00E4
submenu.NotImplementedYet = Not implemented
submenu.admin.adduser = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.admin.adduser.index = K\u00E4ytt\u00E4j\u00E4nlis\u00E4ys
submenu.frontpage = Frontpage
submenu.info.incoming = Incomingview
submenu.info.index = Infon\u00E4kym\u00E4
subnavi.cards = \u0009\u0009
subnavi.info = Info
topnavi.license = Lisenssikoodit
topnavi.license = Lisenssikoodit
user.cropImage = Crop
user.imageUpload.imageNotFound = Select image to upload
......
......@@ -545,6 +545,18 @@ menuitem.navigation.key = Product flag
nasty.user = Go away!
networkassociation.action = Action
networkassociation.create_association = Create association
networkassociation.create_time = Created on
networkassociation.current_associations = Current Associations
networkassociation.drop_association = Drop
networkassociation.ip_address = IP Address
networkassociation.mac_address = MAC Address
networkassociation.modify_time = Modified on
networkassociation.pending_associations = Pending Associations
networkassociation.place = Place
networkassociation.user = User
news.abstract = Abstract
news.edit = Edit
news.expire = Expire
......@@ -952,6 +964,7 @@ submenu.license.manageCodes = Manage codes
submenu.license.viewCodes = View codes
submenu.map.create = Create map
submenu.map.list = List maps
submenu.networkassociation.index = Associations
submenu.orgrole.create = Create organisationrole
submenu.orgrole.list = Organisation roles
submenu.pages.create = Create content
......@@ -1029,6 +1042,7 @@ topmenu.admin = Admin View
topmenu.helpdesk = Helpdesk
topmenu.user = User View
topnavi.adminassoc = Net Associations
topnavi.adminshop = Adminshop
topnavi.billing = Billing
topnavi.competitions = Competitions
......
......@@ -555,6 +555,18 @@ menu.user.edit = Omat tiedot
nasty.user = Mene pois!
networkassociation.action = Toiminto
networkassociation.create_association = Luo assosiaatio
networkassociation.create_time = Luontiaika
networkassociation.current_associations = Aktiiviset assosiaatiot
networkassociation.drop_association = Poista
networkassociation.ip_address = IP-osoite
networkassociation.mac_address = MAC-osoite
networkassociation.modify_time = Muutosaika
networkassociation.pending_associations = Odottavat assosiaatiot
networkassociation.place = Paikka
networkassociation.user = K\u00E4ytt\u00E4j\u00E4
news.abstract = Lyhennelm\u00E4
news.edit = Muokkaa
news.expire = Lopeta julkaisu
......@@ -933,6 +945,7 @@ submenu.license.manageCodes = Hallinnoi lisenssej\u00E4
submenu.license.viewCodes = N\u00E4yt\u00E4 koodit
submenu.map.create = Uusi kartta
submenu.map.list = N\u00E4yt\u00E4 kartat
submenu.networkassociation.index = Assosiaatiot
submenu.orgrole.create = Luo j\u00E4rjest\u00E4j\u00E4rooli
submenu.orgrole.list = J\u00E4rjest\u00E4j\u00E4roolit
submenu.pages.create = Luo sis\u00E4lt\u00F6\u00E4
......@@ -1013,6 +1026,7 @@ topmenu.admin = Yll\u00E4piton\u00E4kym\u00E4
topmenu.helpdesk = Helpdesk
topmenu.user = K\u00E4ytt\u00E4j\u00E4n\u00E4kym\u00E4
topnavi.adminassoc = Verkkoassosioinnit
topnavi.adminshop = Kauppa
topnavi.billing = Laskutus
topnavi.competitions = Kilpailut
......
......@@ -82,12 +82,12 @@ public class NetworkAssociationRestView {
}
}
@GET
@Path("/get_status_by_ip_mac/{ip}/{mac}")
@POST
@Path("/get_status_by_ip_mac")
@Produces({ MediaType.APPLICATION_JSON })
public NetworkAssociationResponseRoot getChanges(
@PathParam("ip") String ip,
@PathParam("mac") String mac
@FormParam("ip") String ip,
@FormParam("mac") String mac
) {
NetworkAssociationResponseRoot resp = new NetworkAssociationResponseRoot();
try {
......
......@@ -5,6 +5,7 @@ import java.util.List;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
......@@ -13,11 +14,15 @@ import javax.inject.Named;
import javax.mail.internet.InternetAddress;
import fi.codecrew.moya.beans.NetworkAssociationBeanLocal;
import fi.codecrew.moya.enums.apps.NetworkAssociationPermission;
import fi.codecrew.moya.enums.apps.TournamentPermission;
import fi.codecrew.moya.model.NetworkAssociation;
import fi.codecrew.moya.utilities.jsf.MessageHelper;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
@Named
public class NetworkAssociationView {
@RequestScoped
public class NetworkAssociationView extends GenericCDIView {
private String ipAddress;
private String macAddress;
......@@ -26,15 +31,27 @@ public class NetworkAssociationView {
private NetworkAssociationBeanLocal networkAssociationBean;
public void initView() {
super.requirePermissions(NetworkAssociationPermission.CAN_ADMINISTER_ASSOCIATIONS);
}
public String createAssociation() {
this.networkAssociationBean.tryAssociate(this.ipAddress, this.macAddress.toLowerCase());
this.ipAddress = "";
this.macAddress = "";
return "";
}
public String dropAssociation(String aid) {
Integer associd = Integer.parseInt(aid);
this.networkAssociationBean.dropAssociationById(associd);
return "";
}
public void validateIP(FacesContext context, UIComponent ui, Object object) throws Exception {
String addr = object.toString().trim();
if(addr.length() == 0)
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "networkassociation.invalid_ip_address", ""));
try {
InetAddress.getByName(addr);
} catch(Exception e) {
......@@ -53,6 +70,10 @@ public class NetworkAssociationView {
public List<NetworkAssociation> getActiveAssociations() {
return networkAssociationBean.getActiveAssociations(false);
}
public List<NetworkAssociation> getPendingAssociations() {
return networkAssociationBean.getPendingAssociations();
}
public String getIpAddress() {
return ipAddress;
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!