]>
jfr.im git - irc/rizon/acid.git/blob - acid/src/main/java/net/rizon/acid/core/User.java
5d3ef64439a7339fadb47394e6de3f5a1dd13359
1 package net
. rizon
. acid
. core
;
3 import java
. sql
. PreparedStatement
;
4 import java
. sql
. ResultSet
;
5 import java
. sql
. SQLException
;
6 import java
. util
. ArrayList
;
7 import java
. util
. Collection
;
8 import java
. util
. HashMap
;
9 import java
. util
. HashSet
;
10 import java
. util
. Hashtable
;
11 import java
. util
. Iterator
;
13 import java
. util
. logging
. Level
;
15 import net
. rizon
. acid
. conf
. AccessPreset
;
16 import net
. rizon
. acid
. util
. CloakGenerator
;
18 public class User
implements Comparable
< User
>
20 private static final Logger log
= Logger
. getLogger ( User
. class . getName ());
21 private String nick
, user
, host
, vhost
, name
, identnick
, modes
, UID
, ip
,
22 certfp
, authflags
, su
;
23 private String cloakedIp
, cloakedHost
;
24 private int nickTS
, conTS
;
25 private Server server
;
26 private String flags
; // Access flags
27 private ArrayList
< String
> oldNicks
;
28 private Hashtable
< String
, ArrayList
< Integer
>> chans
;
29 private HashSet
< Channel
> chanList
;
31 public User ( String nick
, String user
, String host
, String vhost
, String name
,
32 Server server
, int nickTS
, int conTS
, String modes
, String UID
, String ip
)
47 // Check if this IP isn't spoofed.
48 if (! this . ip
. equals ( "255.255.255.255" ) && ! this . ip
. equals ( "0" ))
50 // Cloak IP if IP is visible host, else cloak hostname.
51 this . cloakedIp
= Acidictive
. cloakGenerator
. cloak ( this . ip
);
52 if ( this . ip
. equals ( this . host
))
54 this . cloakedHost
= this . cloakedIp
;
58 this . cloakedHost
= Acidictive
. cloakGenerator
. cloak ( this . host
);
63 this . cloakedIp
= this . ip
;
64 this . cloakedHost
= this . host
;
70 oldNicks
= new ArrayList
< String
>();
71 chans
= new Hashtable
< String
, ArrayList
< Integer
>>();
72 chanList
= new HashSet
< Channel
>();
74 uidMap
. put ( UID
, this );
75 nickMap
. put ( nick
. toLowerCase (), this );
77 this . getServer (). incUsers ();
82 for ( Iterator
< Channel
> it
= chanList
. iterator (); it
. hasNext ();)
84 Channel chan
= it
. next ();
85 chan
. removeUser ( this );
89 this . getServer (). decUsers ();
90 if (!( this instanceof AcidUser
))
91 UserList
. decreaseHost ( this . ip
);
94 nickMap
. remove ( nick
. toLowerCase ());
103 public void clearFlood ()
109 public ArrayList
< Integer
> addChanJoinPart ( String chan
, int TS
)
111 ArrayList
< Integer
> x
= chans
. get ( chan
. toLowerCase ());
114 ArrayList
< Integer
> tmp
= new ArrayList
< Integer
>();
115 tmp
. add ( new Integer ( TS
));
116 chans
. put ( chan
. toLowerCase (), tmp
);
121 x
. add ( new Integer ( TS
));
129 public boolean isOnChan ( Channel chan
)
131 return chanList
. contains ( chan
);
134 public void addChan ( Channel chan
)
139 public void remChan ( Channel chan
)
141 chanList
. remove ( chan
);
144 public Set
< Channel
> getChannels ()
146 return this . chanList
;
149 public String
getChanStr ()
153 for ( Channel c
: chanList
)
158 s
+= " " + c
. getName ();
167 public void setRealhost ( String ip
, String host
)
173 public void setFlags ( String flags
)
178 public void setUID ( String uid
)
183 public void changeNick ( String newNick
)
185 String oldnick
= this . getNick ();
187 nickMap
. remove ( this . getNick (). toLowerCase ());
188 oldNicks
. add ( this . getNick ());
189 if ( oldNicks
. size () > 20 )
192 nickMap
. put ( this . getNick (). toLowerCase (), this );
196 for ( Channel chan
: chanList
)
198 chan
. onNick ( oldnick
, this . getNick ());
203 public String
getIdentNick ()
208 public String
getIP ()
213 public String
getNick ()
218 public boolean hasMode ( String mode
)
220 return modes
. contains ( mode
);
223 public void setMode ( String mode
)
225 if ( mode
. equals ( "" ) || mode
== null )
232 for ( int x
= 0 ; x
< mode
. length (); x
++)
234 chr
= mode
. substring ( x
, x
+ 1 );
239 else if ( chr
. equals ( "-" ))
243 else if ( plus
&& modes
. indexOf ( chr
) == - 1 )
247 else if (! plus
&& modes
. indexOf ( chr
) >= 0 )
250 this . vhost
= this . host
;
251 modes
= modes
. replaceAll ( chr
, "" );
255 for ( Event e
: Event
. getEvents ())
256 e
. onUserMode ( this , old
, modes
);
259 public String
getUser ()
264 public String
getUID ()
269 public String
getHost ()
274 public String
getVhost ()
279 public void setVhost ( String vhost
)
284 public String
getRealName ()
289 public int getNickTS ()
294 public int getConTS ()
299 public void changeNickTS ( int nickTS
)
301 this . nickTS
= nickTS
;
304 public Server
getServer ()
309 /* Does this user have all of these flags? Can also take a type (SRA/SA/SO/whatever) */
310 public boolean hasFlags ( String flags
)
315 String my_flags
= this . flags
;
317 for ( AccessPreset p
: Acidictive
. conf
. access_preset
)
319 for ( String s
: p
. name
)
321 my_flags
= my_flags
. replace ( s
, p
. privileges
);
322 flags
= flags
. replace ( s
, p
. privileges
);
326 for ( int i
= 0 ; i
< flags
. length (); ++ i
)
327 if ( my_flags
. indexOf ( flags
. charAt ( i
)) == - 1 )
333 public String
getCloakedIp ()
335 return this . cloakedIp
;
338 public String
getCloakedHost ()
340 return this . cloakedHost
;
343 public String
getFlags ()
348 public String
getModes ()
353 public String
getCertFP ()
358 public void setCertFP ( String certfp
)
360 this . certfp
= certfp
;
363 public String
getAuthFlags ()
368 public void setAuthFlags ( String authflags
)
370 this . authflags
= authflags
;
373 public String
getSU ()
378 public void setSU ( String su
)
384 public int compareTo ( User user
)
386 return nick
. compareTo ( user
. getNick ());
390 public String
toString ()
392 return nick
+ "!" + user
+ "@" + host
+ "/" + ip
+ "/" + this . cloakedIp
+ "/" + this . cloakedHost
+ "/" + "(" + name
+ ")[" + server
+ "] / " + oldNicksList ();
395 public String
getNickString ()
397 return nick
+ "!" + user
+ "@" + host
+ "/" + ip
+ "/" + this . cloakedIp
+ "/" + this . cloakedHost
+ "/" + vhost
+ "(" + name
+ ")" ;
400 public String
getSNString ()
402 return nick
+ "!" + user
+ "@" + host
;
405 public String
getNString ()
407 return nick
+ "!" + user
+ "@" + host
+ "/" + ip
+ "/" + this . cloakedIp
+ "/" + this . cloakedHost
+ "/" + vhost
+ "(" + name
+ ")(" + modes
+ ")[" + server
+ "]" ;
410 public String
getNStringON ()
412 return nick
+ "!" + user
+ "@" + host
+ "/" + ip
+ "/" + this . cloakedIp
+ "/" + this . cloakedHost
+ "/" + vhost
+ "(" + name
+ ")(" + modes
+ ")[" + server
+ "] / " + oldNicksList ();
415 public String
getNickLine ()
417 return getNick () + "!" + getUser () + "@" + getHost () + "/" + getRealName ();
420 public ArrayList
< String
> oldNicks ()
422 return oldNicks
== null ?
new ArrayList
< String
>() : oldNicks
;
425 public String
oldNicksList ()
427 if ( oldNicks
== null )
428 return "No nick changes." ;
429 if ( oldNicks
. size () > 0 )
431 StringBuffer sb
= new StringBuffer ();
432 for ( int i
= 0 ; i
< oldNicks
. size (); i
++)
434 sb
. append ( oldNicks
. get ( i
) + " -> " );
437 return sb
. toString ();
439 return "No nick changes." ;
442 // TODO: Fixme to make this either properly static or a "real" method
443 // XXX ??????????????????????????????????? wtf is this
444 public void loadAccess ( final User user
)
448 PreparedStatement ps
= Acidictive
. acidcore_sql
. prepare ( "SELECT `user`, `flags` FROM `access` WHERE `user` = ?" );
449 ps
. setString ( 1 , user
. getSU ());
450 ResultSet rs
= Acidictive
. acidcore_sql
. executeQuery ( ps
);
453 String oldflags
= this . flags
;
455 this . flags
= rs
. getString ( "flags" );
456 this . identnick
= user
. getSU ();
458 if ( oldflags
. equals ( this . flags
) == false )
459 Acidictive
. notice ( this , "You have been logged in with flags " + this . flags
);
462 catch ( SQLException ex
)
464 log
. log ( Level
. WARNING
, "Unable to load access for user" , ex
);
468 private static HashMap
< String
, User
> uidMap
= new HashMap
< String
, User
>();
469 private static HashMap
< String
, User
> nickMap
= new HashMap
< String
, User
>();
471 public static User
findUser ( final String nick
)
473 if ( nick
!= null && nick
. isEmpty () == false && Character
. isDigit ( nick
. charAt ( 0 )))
474 return uidMap
. get ( nick
);
475 return nickMap
. get ( nick
. toLowerCase ());
478 public static final Set
< String
> getUsers ()
480 return nickMap
. keySet ();
483 public static Collection
< User
> getUsersC () { return nickMap
. values (); }
485 public static final String
toName ( final String uid
)
487 User u
= findUser ( uid
);
493 public static int userCount ()
495 return nickMap
. size ();
498 private static char [] currentUid
= new char [] { 'A' , 'A' , 'A' , 'A' , 'A' , '@' };
500 public static String
generateUID ()
502 for ( int i
= 5 ; i
>= 0 ; -- i
)
504 if ( currentUid
[ i
] == 'Z' )
509 else if ( currentUid
[ i
] != '9' )
518 return AcidCore
. me
. getSID () + new String ( currentUid
);