in jspwiki-main/src/main/java/org/apache/wiki/auth/user/XMLUserDatabase.java [234:303]
private void saveDOM() throws WikiSecurityException {
if( c_dom == null ) {
throw new IllegalStateException( "FATAL: database does not exist" );
}
final File newFile = new File( c_file.getAbsolutePath() + ".new" );
try( final BufferedWriter io = new BufferedWriter( new OutputStreamWriter( Files.newOutputStream( newFile.toPath() ), StandardCharsets.UTF_8 ) ) ) {
// Write the file header and document root
io.write( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
io.write( "<users>\n" );
// Write each profile as a <user> node
final Element root = c_dom.getDocumentElement();
final NodeList nodes = root.getElementsByTagName( USER_TAG );
for( int i = 0; i < nodes.getLength(); i++ ) {
final Element user = ( Element )nodes.item( i );
io.write( " <" + USER_TAG + " " );
io.write( UID );
io.write( "=\"" + user.getAttribute( UID ) + "\" " );
io.write( LOGIN_NAME );
io.write( "=\"" + user.getAttribute( LOGIN_NAME ) + "\" " );
io.write( WIKI_NAME );
io.write( "=\"" + user.getAttribute( WIKI_NAME ) + "\" " );
io.write( FULL_NAME );
io.write( "=\"" + user.getAttribute( FULL_NAME ) + "\" " );
io.write( EMAIL );
io.write( "=\"" + user.getAttribute( EMAIL ) + "\" " );
io.write( PASSWORD );
io.write( "=\"" + user.getAttribute( PASSWORD ) + "\" " );
io.write( CREATED );
io.write( "=\"" + user.getAttribute( CREATED ) + "\" " );
io.write( LAST_MODIFIED );
io.write( "=\"" + user.getAttribute( LAST_MODIFIED ) + "\" " );
io.write( LOCK_EXPIRY );
io.write( "=\"" + user.getAttribute( LOCK_EXPIRY ) + "\" " );
io.write( ">" );
final NodeList attributes = user.getElementsByTagName( ATTRIBUTES_TAG );
for( int j = 0; j < attributes.getLength(); j++ ) {
final Element attribute = ( Element )attributes.item( j );
final String value = extractText( attribute );
io.write( "\n <" + ATTRIBUTES_TAG + ">" );
io.write( value );
io.write( "</" + ATTRIBUTES_TAG + ">" );
}
io.write( "\n </" + USER_TAG + ">\n" );
}
io.write( "</users>" );
} catch( final IOException e ) {
throw new WikiSecurityException( e.getLocalizedMessage(), e );
}
// Copy new file over old version
final File backup = new File( c_file.getAbsolutePath() + ".old" );
if( backup.exists() ) {
if( !backup.delete() ) {
LOG.error( "Could not delete old user database backup: " + backup );
}
}
if( !c_file.renameTo( backup ) ) {
LOG.error( "Could not create user database backup: " + backup );
}
if( !newFile.renameTo( c_file ) ) {
LOG.error( "Could not save database: " + backup + " restoring backup." );
if( !backup.renameTo( c_file ) ) {
LOG.error( "Restore failed. Check the file permissions." );
}
LOG.error( "Could not save database: " + c_file + ". Check the file permissions" );
}
}