franta-hg@50
|
1 |
package cz.frantovo.nekurak.ejb;
|
franta-hg@50
|
2 |
|
franta-hg@50
|
3 |
import cz.frantovo.nekurak.dao.UzivatelDAO;
|
franta-hg@55
|
4 |
import cz.frantovo.nekurak.dto.PozadavekNaRegistraciUzivatele;
|
franta-hg@50
|
5 |
import cz.frantovo.nekurak.dto.Uzivatel;
|
franta-hg@81
|
6 |
import cz.frantovo.nekurak.email.Adresa;
|
franta-hg@81
|
7 |
import cz.frantovo.nekurak.email.Postak;
|
franta-hg@52
|
8 |
import cz.frantovo.nekurak.util.Hash;
|
franta-hg@52
|
9 |
import cz.frantovo.nekurak.vyjimky.NecekanaVyjimka;
|
franta-hg@52
|
10 |
import cz.frantovo.nekurak.vyjimky.NekurakVyjimka;
|
franta-hg@52
|
11 |
import java.io.UnsupportedEncodingException;
|
franta-hg@52
|
12 |
import java.security.NoSuchAlgorithmException;
|
franta-hg@81
|
13 |
import java.text.MessageFormat;
|
franta-hg@81
|
14 |
import java.util.HashMap;
|
franta-hg@81
|
15 |
import java.util.Locale;
|
franta-hg@81
|
16 |
import java.util.Map;
|
franta-hg@81
|
17 |
import java.util.ResourceBundle;
|
franta-hg@81
|
18 |
import java.util.logging.Level;
|
franta-hg@81
|
19 |
import java.util.logging.Logger;
|
franta-hg@50
|
20 |
import javax.ejb.EJB;
|
franta-hg@50
|
21 |
import javax.ejb.Stateless;
|
franta-hg@50
|
22 |
|
franta-hg@50
|
23 |
/**
|
franta-hg@50
|
24 |
*
|
franta-hg@50
|
25 |
* @author fiki
|
franta-hg@50
|
26 |
*/
|
franta-hg@50
|
27 |
@Stateless
|
franta-hg@50
|
28 |
public class UzivatelEJB implements UzivatelRemote {
|
franta-hg@50
|
29 |
|
franta-hg@145
|
30 |
@EJB
|
franta-hg@145
|
31 |
private UzivatelDAO uzivatelDao;
|
franta-hg@145
|
32 |
@EJB
|
franta-hg@145
|
33 |
private Postak postak;
|
franta-hg@145
|
34 |
private static final Logger log = Logger.getLogger(UzivatelEJB.class.getSimpleName());
|
franta-hg@145
|
35 |
private Map<Locale, ResourceBundle> lokalizace = new HashMap<Locale, ResourceBundle>();
|
franta-hg@50
|
36 |
|
franta-hg@145
|
37 |
/** Uživatele může zakládat kdokoli – uživatel se registruje sám. */
|
franta-hg@145
|
38 |
public void registrujUzivatele(PozadavekNaRegistraciUzivatele p) throws NekurakVyjimka {
|
franta-hg@145
|
39 |
try {
|
franta-hg@145
|
40 |
Uzivatel u = p.getUzivatel();
|
franta-hg@145
|
41 |
/** Heslo musíme před uložení zahashovat, aby se uživatel mohl přihlásit. */
|
franta-hg@145
|
42 |
u.setHeslo(Hash.hashuj(u.getHeslo()));
|
franta-hg@145
|
43 |
uzivatelDao.zaloz(u);
|
franta-hg@145
|
44 |
posliRegistracniEmail(p);
|
franta-hg@145
|
45 |
} catch (NoSuchAlgorithmException e) {
|
franta-hg@145
|
46 |
/** Nemělo by nastat */
|
franta-hg@145
|
47 |
throw new NecekanaVyjimka("Neexistující hashovací algoritmus.", e);
|
franta-hg@145
|
48 |
} catch (UnsupportedEncodingException e) {
|
franta-hg@145
|
49 |
/** Nemělo by nastat */
|
franta-hg@145
|
50 |
throw new NecekanaVyjimka("Nepodporované kódování znaků.", e);
|
franta-hg@145
|
51 |
}
|
franta-hg@81
|
52 |
}
|
franta-hg@81
|
53 |
|
franta-hg@145
|
54 |
private ResourceBundle getLokalizace(Locale jazyk) {
|
franta-hg@145
|
55 |
if (jazyk == null) {
|
franta-hg@145
|
56 |
jazyk = Locale.getDefault();
|
franta-hg@145
|
57 |
}
|
franta-hg@145
|
58 |
|
franta-hg@145
|
59 |
if (lokalizace.get(jazyk) == null) {
|
franta-hg@145
|
60 |
lokalizace.put(jazyk, ResourceBundle.getBundle("cz.frantovo.nekurak.preklady", jazyk));
|
franta-hg@145
|
61 |
}
|
franta-hg@145
|
62 |
|
franta-hg@145
|
63 |
return lokalizace.get(jazyk);
|
franta-hg@81
|
64 |
}
|
franta-hg@81
|
65 |
|
franta-hg@145
|
66 |
private void posliRegistracniEmail(PozadavekNaRegistraciUzivatele p) {
|
franta-hg@145
|
67 |
try {
|
franta-hg@145
|
68 |
String email = p.getEmail();
|
franta-hg@145
|
69 |
if (Postak.isAdresaOk(email)) {
|
franta-hg@145
|
70 |
ResourceBundle rb = getLokalizace(p.getJazyk());
|
franta-hg@145
|
71 |
String jmeno = p.getJmeno() + " " + p.getPrijmeni();
|
franta-hg@145
|
72 |
String predmet = rb.getString("registrace.email.predmet");
|
franta-hg@145
|
73 |
Object[] hodnotyTextu = {jmeno, p.getPrezdivka()};
|
franta-hg@145
|
74 |
String text = new MessageFormat(rb.getString("registrace.email.text"), p.getJazyk()).format(hodnotyTextu);
|
franta-hg@145
|
75 |
postak.odesliZpravu(new Adresa(email, jmeno), null, predmet, text);
|
franta-hg@145
|
76 |
} else {
|
franta-hg@145
|
77 |
log.log(Level.WARNING, "E-mailová adresa buď chybí nebo je chybná → neodesíláme registrační e-mail. Uživatel: {0}", p.getPrezdivka());
|
franta-hg@145
|
78 |
}
|
franta-hg@145
|
79 |
} catch (NekurakVyjimka e) {
|
franta-hg@145
|
80 |
/** e-mail je jen informační → pokud se ho nepodaří odeslat, nemusíme stornovat registraci. */
|
franta-hg@145
|
81 |
log.log(Level.WARNING, "Chyba při posílání registračního e-mailu. Uživatel: " + p.getPrezdivka(), e);
|
franta-hg@145
|
82 |
}
|
franta-hg@81
|
83 |
}
|
franta-hg@50
|
84 |
}
|