/* * Copyright (c) 2008-2016 Computer Network Information Center (CNIC), Chinese Academy of Sciences. * * This file is part of Duckling project. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package cn.vlabs.umt.services.user.service.impl; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Collection; import java.util.List; import java.util.Locale; import java.util.Properties; import javax.imageio.ImageIO; import net.duckling.falcon.api.cache.ICacheService; import org.apache.log4j.Logger; import cn.vlabs.umt.common.mail.EmailTemplate; import cn.vlabs.umt.common.mail.MailException; import cn.vlabs.umt.common.mail.MessageSender; import cn.vlabs.umt.common.util.CommonUtils; import cn.vlabs.umt.common.util.ImageUtils; import cn.vlabs.umt.services.role.RoleService; import cn.vlabs.umt.services.user.bean.LogoUploadResult; import cn.vlabs.umt.services.user.bean.OauthClientBean; import cn.vlabs.umt.services.user.bean.User; import cn.vlabs.umt.services.user.dao.IOauthClientDAO; import cn.vlabs.umt.services.user.service.IClbService; import cn.vlabs.umt.services.user.service.IOauthClientService; public class OauthClientService implements IOauthClientService { private static final Logger LOGGER=Logger.getLogger(OauthClientService.class); private ICacheService cacheService; private IOauthClientDAO oauthClientDAO; private MessageSender emailSender; private RoleService roleService; private IClbService clbService; public void setClbService(IClbService clbService) { this.clbService = clbService; } public void setRoleService(RoleService roleService) { this.roleService = roleService; } public void setEmailSender(MessageSender email) { this.emailSender = email; } public void setCacheService(ICacheService cacheService) { this.cacheService = cacheService; } public void setOauthClientDAO(IOauthClientDAO oauthClientDAO) { this.oauthClientDAO = oauthClientDAO; } @Override public int save(OauthClientBean bean,boolean needCache) { int i=oauthClientDAO.save(bean); if(i>0&&needCache){ addToCache(bean); } return bean.getId(); } private void addToCache(OauthClientBean bean){ cacheService.set(getClientKey(bean), bean); } private void removeFromCache(OauthClientBean bean){ cacheService.remove(getClientKey(bean.getClientId())); } private String getClientKey(OauthClientBean bean){ return getClientKey(bean.getClientId()); } private String getClientKey(String clientId) { return clientId+"-oauth_client_id"; } @Override public OauthClientBean findByClientId(String clientId) { Object o = cacheService.get(getClientKey(clientId)); if(o==null){ OauthClientBean bean = oauthClientDAO.findByClientId(clientId); if(bean!=null){ addToCache(bean); } return bean; }else{ return (OauthClientBean)o; } } @Override public List<OauthClientBean> findByStatus(String id) { return oauthClientDAO.findByStatus(id); } @Override public List<OauthClientBean> findByUid(int userId,String type) { return oauthClientDAO.findByUid(userId,type); } @Override public OauthClientBean findById(int id) { return oauthClientDAO.findById(id); } @Override public void delete(OauthClientBean bean) { removeFromCache(bean); oauthClientDAO.delete(bean); } @Override public void delete(int id) { OauthClientBean bean = oauthClientDAO.findById(id); if(bean!=null){ delete(bean); } } @Override public void update(OauthClientBean bean) { removeFromCache(bean); oauthClientDAO.update(bean); addToCache(bean); } @Override public List<OauthClientBean> getAll() { return oauthClientDAO.getAll(); } @Override public void deleteFromCache(OauthClientBean bean) { removeFromCache(bean); } @Override public void sendAddMailtoAmin(Locale locale,OauthClientBean bean,User u) throws MailException { Collection<User> users=roleService.getRoleMembers("admin"); Properties pro=new Properties(); pro.setProperty("trueName", u.getTrueName()); pro.setProperty("email", u.getCstnetId()); pro.setProperty("appName", bean.getClientName()); pro.setProperty("webSite", bean.getClientWebsite()); pro.setProperty("returnUri", bean.getRedirectURI()); pro.setProperty("description",bean.getDescription()); pro.setProperty("applicant", bean.getApplicant()); pro.setProperty("company", bean.getCompany()); pro.setProperty("contactInfo", bean.getContactInfo()); pro.setProperty("appType", bean.getAppTypeDesc()); emailSender.send(locale, getEmailList(users),EmailTemplate.NOTICE_ADMIN_OAUTH_ADD, pro); } private String[] getEmailList(Collection<User> col){ String[] users=new String[col.size()]; int index=0; for(User user:col){ users[index++]=user.getCstnetId(); } return users; } private String getLogoCustom(int docId){ return "/logo?logId="+docId+"&size="+IClbService.LOGO_SMALL; } @Override public void sendUpdateMailtoAmin(Locale locale, OauthClientBean beforeBean, OauthClientBean afterBean, User u) throws MailException { Collection<User> users=roleService.getRoleMembers("admin"); Properties pro=new Properties(); pro.setProperty("trueName", u.getTrueName()); pro.setProperty("email", u.getCstnetId()); pro.setProperty("orgAppName", beforeBean.getClientName()); pro.setProperty("orgwebSite", beforeBean.getClientWebsite()); pro.setProperty("orgreturnUri", beforeBean.getRedirectURI()); pro.setProperty("orgdescription",beforeBean.getDescription()); pro.setProperty("orgapplicant", beforeBean.getApplicant()); pro.setProperty("orgcompany", beforeBean.getCompany()); pro.setProperty("orgcontactInfo",beforeBean.getContactInfo()); pro.setProperty("orgappType", beforeBean.getAppTypeDesc()); pro.setProperty("afterAppName", afterBean.getClientName()); pro.setProperty("afterwebSite", afterBean.getClientWebsite()); pro.setProperty("afterreturnUri", afterBean.getRedirectURI()); pro.setProperty("afterdescription",afterBean.getDescription()); pro.setProperty("afterapplicant", afterBean.getApplicant()); pro.setProperty("aftercompany", afterBean.getCompany()); pro.setProperty("aftercontactInfo",afterBean.getContactInfo()); pro.setProperty("afterappType", afterBean.getAppTypeDesc()); emailSender.send(locale, getEmailList(users),EmailTemplate.NOTICE_ADMIN_OAUTH_UPDATE, pro); } @Override public void sendAdminToDevelop(Locale locale, OauthClientBean bean,User user){ Properties pro=new Properties(); pro.setProperty("appName", CommonUtils.killNull(bean.getClientName())); pro.setProperty("webSite", CommonUtils.killNull(bean.getClientWebsite())); pro.setProperty("returnUri", CommonUtils.killNull(bean.getRedirectURI())); pro.setProperty("description",CommonUtils.killNull(bean.getDescription())); pro.setProperty("applicant", CommonUtils.killNull(bean.getApplicant())); pro.setProperty("company", CommonUtils.killNull(bean.getCompany())); pro.setProperty("status",CommonUtils.killNull(bean.getStatusDisplay())); pro.setProperty("contact", CommonUtils.killNull(bean.getContactInfo())); pro.setProperty("appType", CommonUtils.killNull(bean.getAppTypeDesc())); try { if(user!=null){ emailSender.send(locale, user.getCstnetId(), EmailTemplate.NOTICE_USER_OAUTH_UPDATE, pro); } } catch (MailException e) { LOGGER.error(e.getMessage(),e); } } @Override public void updateDevelop(OauthClientBean bean) { removeFromCache(bean); oauthClientDAO.updateDevelop(bean); addToCache(findById(bean.getId())); } @Override public OauthClientBean findAcceptByClientId(String clientId) { OauthClientBean result = findByClientId(clientId); if(result!=null&&result.isAccept()){ return result; } return null; } @Override public List<OauthClientBean> searchClientByKey(String key,int offset,int size) { return oauthClientDAO.searchClientByKey(key,offset,size); } @Override public void uploadLogoDefault(OauthClientBean bean,File tmpFile) throws FileNotFoundException { int logo100Id=clbService.upload(new FileInputStream(tmpFile), System.currentTimeMillis()+".fn.png"); boolean flag100=false; boolean flag64=false; boolean flag32=false; boolean flag16=false; if(bean.is100LogoDefault()){ flag100=true; bean.setLogo100m100(logo100Id); } if(bean.is64LogoDefault()){ flag64=true; bean.setLogo64m64(logo100Id); } if(bean.is32LogoDefault()){ flag32=true; bean.setLogo32m32(logo100Id); } if(bean.is16LogoDefault()){ flag16=true; bean.setLogo16m16(logo100Id); } bean.setDefaultLogo(logo100Id); bean.setLogoCustom(getLogoCustom(logo100Id)); oauthClientDAO.updateLogo(bean,flag100,flag64,flag32,flag16); } @Override public void updateDefaultLogoChange(OauthClientBean bean, File file) throws FileNotFoundException { int logo100Id=clbService.upload(new FileInputStream(file), System.currentTimeMillis()+"fn.jpg"); boolean update100=false; boolean update64=false; boolean update32=false; boolean update16=false; if(bean.getDefaultLogo()==bean.getLogo100m100()){ bean.setLogo100m100(logo100Id); update100=true; }if(bean.getDefaultLogo()==bean.getLogo64m64()){ bean.setLogo64m64(logo100Id); update64=true; }if(bean.getDefaultLogo()==bean.getLogo32m32()){ bean.setLogo32m32(logo100Id); update32=true; }if(bean.getDefaultLogo()==bean.getLogo16m16()){ bean.setLogo16m16(logo100Id); update16=true; } bean.setDefaultLogo(logo100Id); bean.setLogoCustom(getLogoCustom(logo100Id)); oauthClientDAO.updateLogo(bean,update100,update64,update32,update16); } @Override public LogoUploadResult uploadLogo(OauthClientBean bean,File tmpFile,String uploadName, String target) throws IOException { LogoUploadResult result=new LogoUploadResult(); if(uploadName==null){ uploadName="untitled.png"; } result.setCurrTarget(target); result.setClientId(bean.getId()); File defaultCutFile=ImageUtils.defaultCut(tmpFile); boolean is100Updated=false; boolean is64Updated=false; boolean is32Updated=false; boolean is16Updated=false; BufferedImage src = ImageIO.read(new FileInputStream(tmpFile)); int height=src.getHeight(); int width=src.getWidth(); switch(target){ case "100p":{ int logo100Id=0; if(height==width){ logo100Id=clbService.upload(new FileInputStream(tmpFile), target+"."+uploadName); }else{ logo100Id=clbService.upload(new FileInputStream(ImageUtils.scale(defaultCutFile, 100, 100)), target+"."+uploadName); } bean.setLogoCustom(getLogoCustom(logo100Id)); is100Updated=true; bean.setLogo100m100(logo100Id); result.add("100p", logo100Id); boolean is64LogoDefault=bean.is64LogoDefault(); boolean is32LogoDefault=bean.is32LogoDefault(); boolean is16LogoDefault=bean.is16LogoDefault(); if(is64LogoDefault){ int logo64Id=clbService.upload(new FileInputStream(ImageUtils.scale(defaultCutFile, 64,64)), target+"."+uploadName); is64Updated=true; bean.setLogo64m64(logo64Id); result.add("64p", logo64Id); } if(is32LogoDefault){ int logo32Id=clbService.upload(new FileInputStream(ImageUtils.scale(defaultCutFile, 32, 32)), target+"."+uploadName); is32Updated=true; bean.setLogo32m32(logo32Id); result.add("32p", logo32Id); } if(is16LogoDefault){ int logo16Id=clbService.upload(new FileInputStream(ImageUtils.scale(defaultCutFile, 16, 16)), target+"."+uploadName); is16Updated=true; bean.setLogo16m16(logo16Id); result.add("16p", logo16Id); } break; } case "64p":{ if(height!=64||width!=64){ result.setSuccess(false); result.setDesc("请上传64*64像素的图片"); return result; } int logo64Id=clbService.upload(new FileInputStream(tmpFile), target+"."+uploadName); is64Updated=true; bean.setLogo64m64(logo64Id); bean.setLogoCustom(getLogoCustom(logo64Id)); result.add("64p", logo64Id); break; } case "32p":{ if(height!=32||width!=32){ result.setSuccess(false); result.setDesc("请上传32*32像素的图片"); return result; } int logo32Id=clbService.upload(new FileInputStream(tmpFile), target+"."+uploadName); is32Updated=true; bean.setLogo32m32(logo32Id); bean.setLogoCustom(getLogoCustom(logo32Id)); result.add("32p", logo32Id); break; } case "16p":{ if(height!=16||width!=16){ result.setSuccess(false); result.setDesc("请上传16*16像素的图片"); return result; } int logo16Id=clbService.upload(new FileInputStream(tmpFile), target+"."+uploadName); is16Updated=true; bean.setLogo16m16(logo16Id); result.add("16p", logo16Id); break; } default:{ LOGGER.error("target Error,"+target); result.setSuccess(false); result.setDesc("targetError"); } } oauthClientDAO.updateLogo(bean,is100Updated,is64Updated,is32Updated,is16Updated); //success return result; } @Override public void removeLogo(OauthClientBean bean, boolean is100Updated, boolean is64Updated, boolean is32Updated, boolean is16Updated) { oauthClientDAO.removeLogo(bean,is100Updated,is64Updated,is32Updated,is16Updated); } @Override public List<OauthClientBean> findEnableAppAndAccepted(String type) { return oauthClientDAO.findEnableAppAndAccepted(type); } @Override public List<String> getAllCallBack() { return oauthClientDAO.getAllCallBack(); } }