/**
* Yona, 21st Century Project Hosting SW
*
* Copyright Yona & Yobi Authors & NAVER Corp.
* https://yona.io
**/
package controllers;
import com.avaje.ebean.ExpressionList;
import com.avaje.ebean.Page;
import com.avaje.ebean.annotation.Transactional;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.feth.play.module.mail.Mailer;
import com.feth.play.module.mail.Mailer.Mail;
import com.feth.play.module.mail.Mailer.Mail.Body;
import com.feth.play.module.pa.PlayAuthenticate;
import controllers.annotation.AnonymousCheck;
import jxl.write.WriteException;
import models.*;
import models.enumeration.Operation;
import models.enumeration.UserState;
import models.support.LdapUser;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.crypto.RandomNumberGenerator;
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.Sha256Hash;
import org.apache.shiro.util.ByteSource;
import org.joda.time.LocalDateTime;
import play.Configuration;
import play.Logger;
import play.Play;
import play.data.Form;
import play.i18n.Messages;
import play.libs.Json;
import play.mvc.BodyParser;
import play.mvc.Controller;
import play.mvc.Http;
import play.mvc.Http.Cookie;
import play.mvc.Result;
import utils.*;
import views.html.user.*;
import javax.naming.AuthenticationException;
import javax.naming.CommunicationException;
import javax.naming.NamingException;
import java.io.IOException;
import java.util.*;
import static com.feth.play.module.mail.Mailer.getEmailName;
import static models.NotificationMail.isAllowedEmailDomains;
import static play.data.Form.form;
import static play.libs.Json.toJson;
import static utils.HtmlUtil.defaultSanitize;
import static utils.LdapService.FALLBACK_TO_LOCAL_LOGIN;
public class UserApp extends Controller {
public static final String SESSION_USERID = "userId";
public static final String SESSION_LOGINID = "loginId";
public static final String SESSION_USERNAME = "userName";
public static final String SESSION_KEY = "key";
public static final String TOKEN = "yobi.token";
public static final String TOKEN_SEPARATOR = ":";
public static final int TOKEN_LENGTH = 2;
public static final int MAX_AGE = 30*24*60*60;
public static final String DEFAULT_AVATAR_URL
= routes.Assets.at("images/default-avatar-128.png").url();
private static final int AVATAR_FILE_LIMIT_SIZE = 1024*1000*1; //1M
public static final int MAX_FETCH_USERS = 10; //Match value to Typeahead deafult value at yobi.ui.Typeaheds.js
private static final int HASH_ITERATIONS = 1024;
public static final int DAYS_AGO = 14;
public static final int UNDEFINED = 0;
public static final String DAYS_AGO_COOKIE = "daysAgo";
public static final String DEFAULT_GROUP = "own";
public static final String DEFAULT_SELECTED_TAB = "projects";
public static final String TOKEN_USER = "TOKEN_USER";
public static final String USER_TOKEN_HEADER = "Yona-Token";
public static final boolean useSocialLoginOnly = play.Configuration.root()
.getBoolean("application.use.social.login.only", false);
public static final String FLASH_MESSAGE_KEY = "message";
public static final String FLASH_ERROR_KEY = "error";
private static boolean usingEmailVerification = play.Configuration.root()
.getBoolean("application.use.email.verification", false);
@AnonymousCheck
public static Result users(String query) {
String referer = StringUtils.defaultString(request().getHeader("referer"), "");
if (!referer.endsWith("members") || !request().accepts("application/json")) {
return status(Http.Status.NOT_ACCEPTABLE);
}
if(StringUtils.isEmpty(query)){
return ok(toJson(new ArrayList<>()));
}
List