SlideShare a Scribd company logo
1 of 101
Download to read offline
SOCIAL NETWORKING SITE
22102D020145 1 OF 101
Project – 2: Design a social website with the following features.
Build Profile - Members allow to build their profiles.
Upload content - The Social Networking Sites allow members to upload text messages,
photographs, audio and video files. All posts are arranged in descending order with the last post
coming first.
Build conversations - Content posted by members can be browsed and commented upon by all
members who form part of the community. Content can also be tagged from third party sites on
subjects that interest the group.
INTRODUCTION:
Designing a Dynamic Social Website
In the digital age, social networking sites have become an integral part of our lives, connecting
people across the globe and facilitating the exchange of ideas, interests, and experiences. In this
project, we aim to design a cutting-edge social website that brings people together, empowers them
to build meaningful connections, and fosters engaging conversations within a vibrant community.
Our social website will provide a user-friendly platform where members can create and personalize
their profiles, showcasing their interests, achievements, and personality. By allowing members to
build their profiles, we aim to create a space that reflects their individuality and enables them to
connect with like-minded individuals.
One of the key features of our social website is the ability for members to upload various forms of
content, including text messages, photographs, audio files, and videos. By providing a diverse range
of content formats, we seek to cater to different preferences and enable members to express
themselves creatively. All uploaded content will be organized in a chronological order, with the
most recent posts appearing at the top, allowing users to stay updated and engaged with the latest
contributions from the community.
Building conversations lies at the heart of our social website. Members will have the opportunity to
browse through the content posted by others and participate in dynamic discussions by leaving
comments and feedback. This interactive approach encourages active engagement and facilitates the
exchange of diverse perspectives within the community. Furthermore, we also facilitate the tagging
of content from third-party sites, allowing members to explore and share topics of interest beyond
the platform, enhancing the richness of discussions and broadening the horizons of the community.
Our team of experienced designers and developers are dedicated to creating an intuitive and visually
appealing interface, ensuring seamless navigation and an enjoyable user experience. We prioritize
user privacy and data security, implementing robust measures to protect personal information and
guarantee a safe and trusted online environment.
SOCIAL NETWORKING SITE
22102D020145 2 OF 101
Through this project, we strive to cultivate a vibrant online community where members can
connect, express themselves, and build meaningful relationships. By combining the features of
profile building, content uploading, and interactive conversations, our social website aims to
provide a platform that fosters creativity, collaboration, and a sense of belonging. Join us on this
exciting journey as we shape the future of social networking together.
Features:
 Build Profile– Members will be able to create their own profiles, which will include their
name, age, location, interests, and other personal information.
 Upload Content– Members will be able to upload text messages, photographs, audio and
video files. All posts will be arranged in descending order with the last post coming first.
 Build Conversations–Content posted by members can be browsed and commented upon by
all members who form part of the community. Content can also be tagged from third party
sites on subjects that interest the group.
This project will focus on the design of a social website that allows users to build their profiles,
upload content, and build conversations with other users. The website will be designed to be user-
friendly and easy to navigate. It will also be designed to be secure and private, so that users can feel
comfortable sharing their personal information and content.
The following are some of the specific features that will be included in the social website:
 Profile Builder– Users will be able to create their own profiles, which will include their
name, age, location, interests, and other personal information.
 Content Uploader– Users will be able to upload text messages, photographs, audio and
video files. All posts will be arranged in descending order with the last post coming first.
 Conversation Builder–Content posted by members can be browsed and commented upon
by all members who form part of the community. Content can also be tagged from third
party sites on subjects that interest the group.
The social website will be designed to be user-friendly and easy to navigate. It will also be designed
to be secure and private, so that users can feel comfortable sharing their personal information and
content.
The following are some of the design considerations that will be taken into account:
 User-friendliness– The website will be designed to be easy to use and navigate. Users
should be able to find the information and features they need quickly and easily.
 Security– The website will be designed to be secure and private. Users should feel
comfortable sharing their personal information and content on the website.
 Privacy– The website will be designed to protect user privacy. Users should be able to
control who can see their personal information and content.
SOCIAL NETWORKING SITE
22102D020145 3 OF 101
The social website will be a valuable resource for users who want to connect with other people who
share their interests. It will also be a great way for users to share their thoughts, ideas, and
experiences with the world.
SYSTEM ARCHITECTURE:
The system architecture of a social networking site is complex and involves many different
components. The following is a high-level overview of the system architecture:
 User interface: The user interface is the part of the system that users interact with. It allows
users to create profiles, upload content, and build conversations. The user interface is
typically implemented using a web browser.
 Content management system: The content management system (CMS) is responsible for
storing and managing the content of the social networking site. The CMS allows users to
create, edit, and delete content. It also allows users to control who can access and view their
content.
 Application server: The application server is responsible for running the code that powers
the social networking site. The application server provides a platform for the CMS and other
components to run on.
 Database: The database stores all of the data for the social networking site. This includes
user profiles, content, and other information.
 Web server: The web server is responsible for delivering the content of the social
networking site to users. The web server receives requests from users' web browsers and
delivers the requested content.
 Network: The network is responsible for connecting the different components of the social
networking site. The network allows users to access the social networking site from
anywhere in the world.
The system architecture of a social networking site is complex and involves many different
components. The specific components that are used will depend on the size and complexity of the
social networking site.
Here are some additional considerations for the system architecture of a social networking site:
 Security: The social networking site must be secure to protect the privacy of its users. This
means that the system must be designed to prevent unauthorized access to user data.
 Scalability: The social networking site must be scalable to handle a large number of users.
This means that the system must be designed to be able to add more resources as needed.
 Performance: The social networking site must be performant to provide a good user
experience. This means that the system must be designed to be able to handle a large number
of requests without slowing down.
SOCIAL NETWORKING SITE
22102D020145 4 OF 101
The system architecture of a social networking site is a critical part of the development process. By
carefully considering the different components and considerations, you can create a social
networking site that is secure, scalable, and performant.
The system architecture of the social website consists of several key components that work together
to provide a seamless user experience. These components include:
1. User Interface (UI): The user interface component is responsible for presenting the website's
visual elements to users and facilitating their interactions. It encompasses the design of the
website, including layout, color scheme, and navigation menus, ensuring an intuitive and
visually appealing experience for members.
2. User Profiles: The user profile component allows members to create and customize their
profiles. It includes features such as profile pictures, personal information, interests, and
achievements. The profiles serve as a representation of each member's identity within the
community.
3. Content Management: The content management component handles the storage, retrieval,
and organization of various types of content uploaded by members. This includes text
messages, photographs, audio files, and videos. All posts are arranged in descending order,
with the latest content displayed first for easy access.
4. Community Interaction: The community interaction component enables members to engage
with each other's content. It includes features like commenting, liking, and sharing, which
foster conversations and encourage collaboration. Members can leave comments on posts,
providing feedback, initiating discussions, and forming connections with other community
members.
5. Third-Party Integration: The third-party integration component allows members to tag and
share content from external sources that align with the interests of the community. This
feature enhances the diversity of topics and resources available for discussion, enabling
members to explore a wide range of subjects beyond the platform.
6. Privacy and Security: The privacy and security component ensures the protection of user
data and maintains a safe online environment. It includes measures such as user
authentication, secure data transmission, and data encryption to safeguard personal
information and prevent unauthorized access.
7. Backend and Database: The backend and database component consists of server-side
technologies and databases that power the website's functionality. It handles requests from
the user interface, processes data, and stores it securely. This component also manages user
authentication, content storage, and retrieval.
8. Scalability and Performance: The scalability and performance component focuses on
ensuring the website can handle a growing number of users and content without
SOCIAL NETWORKING SITE
22102D020145 5 OF 101
compromising performance. It involves optimizing code, utilizing caching mechanisms, and
employing scalable infrastructure to maintain a responsive and efficient user experience.
Overall, the system architecture of the social website is designed to provide a user-friendly
interface, robust content management, interactive community engagement, and a secure
environment. By integrating these components effectively, the website can deliver an engaging and
seamless social networking experience for its members.
UML DIAGRAM:
SOCIAL NETWORKING SITE
22102D020145 6 OF 101
SOCIAL NETWORKING SITE
22102D020145 7 OF 101
SOCIAL NETWORKING SITE
22102D020145 8 OF 101
SOCIAL NETWORKING SITE
22102D020145 9 OF 101
CODE:
Back-end
.idea
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/../../../../../../../../:UsersnikolDesktopGitHubLinkedIn-Cloneback-end.idea/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/
Back-end.iml
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
Compiler
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="linkedin-clone" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name="linkedin-clone" target="1.8" />
SOCIAL NETWORKING SITE
22102D020145 10 OF 101
</bytecodeTargetLevel>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="linkedin-clone" options="-parameters" />
</option>
</component>
</project>
wrapper
WrapperDownloader
/*
* Copyright 2007-present the original author or authors.
*
* 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
*
* https://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.
*/
import java.net.*;
import java.io.*;
import java.nio.channels.*;
import java.util.Properties;
public class MavenWrapperDownloader {
private static final String WRAPPER_VERSION = "0.5.6";
/**
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
*/
private static final String DEFAULT_DOWNLOAD_URL =
"https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+ WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
/**
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
* use instead of the default one.
*/
SOCIAL NETWORKING SITE
22102D020145 11 OF 101
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
".mvn/wrapper/maven-wrapper.properties";
/**
* Path where the maven-wrapper.jar will be saved to.
*/
private static final String MAVEN_WRAPPER_JAR_PATH =
".mvn/wrapper/maven-wrapper.jar";
/**
* Name of the property which should be used to override the default download url for the
wrapper.
*/
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
public static void main(String args[]) {
System.out.println("- Downloader started");
File baseDirectory = new File(args[0]);
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
// If the maven-wrapper.properties exists, read it and check if it contains a custom
// wrapperUrl parameter.
File mavenWrapperPropertyFile = new File(baseDirectory,
MAVEN_WRAPPER_PROPERTIES_PATH);
String url = DEFAULT_DOWNLOAD_URL;
if(mavenWrapperPropertyFile.exists()) {
FileInputStream mavenWrapperPropertyFileInputStream = null;
try {
mavenWrapperPropertyFileInputStream = new
FileInputStream(mavenWrapperPropertyFile);
Properties mavenWrapperProperties = new Properties();
mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
} catch (IOException e) {
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH +
"'");
} finally {
try {
if(mavenWrapperPropertyFileInputStream != null) {
mavenWrapperPropertyFileInputStream.close();
}
} catch (IOException e) {
// Ignore ...
}
}
}
System.out.println("- Downloading from: " + url);
SOCIAL NETWORKING SITE
22102D020145 12 OF 101
File outputFile = new File(baseDirectory.getAbsolutePath(),
MAVEN_WRAPPER_JAR_PATH);
if(!outputFile.getParentFile().exists()) {
if(!outputFile.getParentFile().mkdirs()) {
System.out.println(
"- ERROR creating output directory '" +
outputFile.getParentFile().getAbsolutePath() + "'");
}
}
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
try {
downloadFileFromURL(url, outputFile);
System.out.println("Done");
System.exit(0);
} catch (Throwable e) {
System.out.println("- Error downloading");
e.printStackTrace();
System.exit(1);
}
}
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
if (System.getenv("MVNW_USERNAME") != null &&
System.getenv("MVNW_PASSWORD") != null) {
String username = System.getenv("MVNW_USERNAME");
char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
}
URL website = new URL(urlString);
ReadableByteChannel rbc;
rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(destination);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
}
}
SOCIAL NETWORKING SITE
22102D020145 13 OF 101
Advices
EmailExistsAlreadyAdvice
package com.linkedin.linkedinclone.advices;
import com.linkedin.linkedinclone.exceptions.EmailExistsAlreadyException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
@ControllerAdvice
public class EmailExistsAlreadyAdvice {
@ResponseBody
@ExceptionHandler(EmailExistsAlreadyException.class)
@ResponseStatus(HttpStatus.IM_USED)
String emailFoundHandler(EmailExistsAlreadyException ex) {
return ex.getMessage();
}
}
EmailNotFoundAdvice
package com.linkedin.linkedinclone.advices;
import com.linkedin.linkedinclone.exceptions.EmailNotFoundException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
@ControllerAdvice
public class EmailNotFoundAdvice {
@ResponseBody
@ExceptionHandler(EmailNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
String userNotFoundHandler(EmailNotFoundException ex) {
return ex.getMessage();
}
SOCIAL NETWORKING SITE
22102D020145 14 OF 101
}
ObjectExistsAdvice
package com.linkedin.linkedinclone.advices;
import com.linkedin.linkedinclone.exceptions.EmailNotFoundException;
import com.linkedin.linkedinclone.exceptions.ObjectExistsException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
@ControllerAdvice
public class ObjectExistsAdvice {
@ResponseBody
@ExceptionHandler(ObjectExistsException.class)
@ResponseStatus(HttpStatus.FOUND)
String existsHandler(ObjectExistsException ex) {
return ex.getMessage();
}
}
PasswordNotSameAdvice
package com.linkedin.linkedinclone.advices;
import com.linkedin.linkedinclone.exceptions.EmailNotFoundException;
import com.linkedin.linkedinclone.exceptions.PasswordsNotSameException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
@ControllerAdvice
public class PasswordsNotSameAdvice {
@ResponseBody
@ExceptionHandler(PasswordsNotSameException.class)
@ResponseStatus(HttpStatus.NOT_ACCEPTABLE)
String differentPasswordsHandler(PasswordsNotSameException ex) {
return ex.getMessage();
}
}
SOCIAL NETWORKING SITE
22102D020145 15 OF 101
PostNotFoundAdvice
package com.linkedin.linkedinclone.advices;
import com.linkedin.linkedinclone.exceptions.PostNotFoundException;
import com.linkedin.linkedinclone.exceptions.UserNotFoundException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
@ControllerAdvice
public class PostNotFoundAdvice {
@ResponseBody
@ExceptionHandler(PostNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
String userNotFoundHandler(PostNotFoundException ex) {
return ex.getMessage();
}
}
UserNotFoundAdvice
package com.linkedin.linkedinclone.advices;
import com.linkedin.linkedinclone.exceptions.PostNotFoundException;
import com.linkedin.linkedinclone.exceptions.UserNotFoundException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
@ControllerAdvice
public class PostNotFoundAdvice {
@ResponseBody
@ExceptionHandler(PostNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
String userNotFoundHandler(PostNotFoundException ex) {
return ex.getMessage();
}
}
SOCIAL NETWORKING SITE
22102D020145 16 OF 101
UserNotFounAdvice
package com.linkedin.linkedinclone.advices;
import com.linkedin.linkedinclone.exceptions.UserNotFoundException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
@ControllerAdvice
public class UserNotFoundAdvice {
@ResponseBody
@ExceptionHandler(UserNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
String userNotFoundHandler(UserNotFoundException ex) {
return ex.getMessage();
}
}
WrongPasswordAdvice
package com.linkedin.linkedinclone.advices;
import com.linkedin.linkedinclone.exceptions.UserNotFoundException;
import com.linkedin.linkedinclone.exceptions.WrongPasswordException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
@ControllerAdvice
public class WrongPasswordAdvice {
@ResponseBody
@ExceptionHandler(WrongPasswordException.class)
@ResponseStatus(HttpStatus.FORBIDDEN)
String wrongPasswordHandler(WrongPasswordException ex) {
return ex.getMessage();
}
}
Controllers
SOCIAL NETWORKING SITE
22102D020145 17 OF 101
AdminController
package com.linkedin.linkedinclone.controllers;
import com.linkedin.linkedinclone.model.Picture;
import com.linkedin.linkedinclone.model.User;
import com.linkedin.linkedinclone.repositories.RoleRepository;
import com.linkedin.linkedinclone.repositories.UserRepository;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Set;
import static com.linkedin.linkedinclone.utils.PictureSave.decompressBytes;
@RestController
@AllArgsConstructor
public class AdminController {
private final UserRepository userRepository;
private final RoleRepository roleRepository;
@Autowired
private final BCryptPasswordEncoder encoder;
@CrossOrigin(origins = "*") // CrossOrigin: For connecting with angular
@GetMapping("/admin/users")
public List<User> all() {
List<User> users = userRepository.findAll();
for(User u: users){
System.out.println(u.getName());
Picture uPic = u.getProfilePicture();
if(uPic!=null && uPic.isCompressed()) {
Picture temp = new Picture(uPic.getName(), uPic.getType(),
decompressBytes(uPic.getBytes()));
temp.setCompressed(false);
u.setProfilePicture(temp);
}
}
return users;
}
SOCIAL NETWORKING SITE
22102D020145 18 OF 101
}
ChatController
package com.linkedin.linkedinclone.controllers;
import com.linkedin.linkedinclone.exceptions.UserNotFoundException;
import com.linkedin.linkedinclone.model.*;
import com.linkedin.linkedinclone.repositories.ChatRepository;
import com.linkedin.linkedinclone.repositories.MessageRepository;
import com.linkedin.linkedinclone.repositories.RoleRepository;
import com.linkedin.linkedinclone.repositories.UserRepository;
import com.linkedin.linkedinclone.services.UserService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.HashSet;
import java.util.Set;
import static com.linkedin.linkedinclone.utils.PictureSave.decompressBytes;
@RestController
@AllArgsConstructor
public class ChatController {
@Autowired
UserService userService;
private final UserRepository userRepository;
private final RoleRepository roleRepository;
private final ChatRepository chatRepository;
private final MessageRepository messageRepository;
@CrossOrigin(origins = "*")
@GetMapping("/in/{id}/chats")
public Set<Chat> getAllChats(@PathVariable Long id) {
System.out.println("nnn");
User currentUser = userRepository.findById(id).orElseThrow(()->new
UserNotFoundException("User with "+id+" not found"));
for(Chat c: currentUser.getChats())
System.out.println(c);
for(Chat c: currentUser.getChats()) {
SOCIAL NETWORKING SITE
22102D020145 19 OF 101
System.out.println(c);
for(User u: c.getUsers()){
Picture pic = u.getProfilePicture();
if(pic != null){
if(pic.isCompressed()){
Picture tempPicture = new
Picture(pic.getId(),pic.getName(),pic.getType(),decompressBytes(pic.getBytes()));
pic.setCompressed(false);
u.setProfilePicture(tempPicture);
}
}
}
for(Message m: c.getMessages()){
User u = m.getUserMadeBy();
Picture pic = u.getProfilePicture();
if(pic != null){
if(pic.isCompressed()){
Picture tempPicture = new
Picture(pic.getId(),pic.getName(),pic.getType(),decompressBytes(pic.getBytes()));
pic.setCompressed(false);
u.setProfilePicture(tempPicture);
}
}
}
}
return currentUser.getChats();
}
@CrossOrigin(origins = "*")
@GetMapping("/in/{id}/chat/{chatId}")
public Chat getChat(@PathVariable Long id, @PathVariable Long chatId) {
User currentUser = userRepository.findById(id).orElseThrow(()->new
UserNotFoundException("User with "+id+" not found"));
Chat chat = chatRepository.findById(chatId).orElseThrow(()->new
UserNotFoundException("Chat with "+id+" not found"));
return chat;
}
@CrossOrigin(origins = "*")
@PostMapping("/in/{id}/chat/{chatId}/new-message")
public ResponseEntity<?> newMessage(@PathVariable Long id, @PathVariable Long chatId,
@RequestBody Message message) {
User currentUser = userRepository.findById(id).orElseThrow(()->new
UserNotFoundException("User with "+id+" not found"));
Chat chat = chatRepository.findById(chatId).orElseThrow(()->new
UserNotFoundException("Chat with "+id+" not found"));
SOCIAL NETWORKING SITE
22102D020145 20 OF 101
message.setUserMadeBy(currentUser);
message.setChat(chat);
messageRepository.save(message);
return ResponseEntity.ok(message);
}
}
FeedController
package com.linkedin.linkedinclone.controllers;
import com.intellij.util.indexing.ID;
import com.linkedin.linkedinclone.dto.FeedDTO;
import com.linkedin.linkedinclone.exceptions.PostNotFoundException;
import com.linkedin.linkedinclone.exceptions.UserNotFoundException;
import com.linkedin.linkedinclone.model.*;
import com.linkedin.linkedinclone.recommendation.RecommendationAlgos;
import com.linkedin.linkedinclone.repositories.*;
import com.linkedin.linkedinclone.services.UserService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.*;
import static com.linkedin.linkedinclone.enumerations.NotificationType.INTEREST;
import static com.linkedin.linkedinclone.utils.PictureSave.compressBytes;
import static com.linkedin.linkedinclone.utils.PictureSave.decompressBytes;
@RestController
@AllArgsConstructor
public class FeedController {
@Autowired
UserService userService;
SOCIAL NETWORKING SITE
22102D020145 21 OF 101
private final UserRepository userRepository;
private final PostRepository postRepository;
private final PictureRepository pictureRepository;
private final CommentRepository commentRepository;
private final NotificationRepository notificationRepository;
private final InterestReactionRepository interestReactionRepository;
@CrossOrigin(origins = "*")
@GetMapping("/in/{id}/feed-posts")
public Set<Post> getFeedPosts(@PathVariable Long id) {
System.out.println("nnn ------------------- Get feed posts");
User user = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User
with "+id+" not found"));
Set<Post> feedPosts = new HashSet<>();
feedPosts.addAll(user.getPosts());
Set<Connection> connections = user.getUsersFollowing();
for(Connection con: connections) {
if(con.getIsAccepted()){
User userFollowing = con.getUserFollowed();
feedPosts.addAll(userFollowing.getPosts());
Set<InterestReaction> interestReactions = userFollowing.getInterestReactions();
for(InterestReaction ir: interestReactions){
feedPosts.add(ir.getPost());
}
}
}
connections = user.getUserFollowedBy();
for(Connection con: connections) {
if(con.getIsAccepted()){
User userFollowing = con.getUserFollowing();
feedPosts.addAll(userFollowing.getPosts());
Set<InterestReaction> interestReactions = userFollowing.getInterestReactions();
for(InterestReaction ir: interestReactions){
feedPosts.add(ir.getPost());
}
}
}
for(Post p: feedPosts) {
User owner = p.getOwner();
SOCIAL NETWORKING SITE
22102D020145 22 OF 101
Picture pic = owner.getProfilePicture();
if(pic != null){
if(pic.isCompressed()){
Picture dbPic = pictureRepository.findById(pic.getId()).orElseThrow(()->new
UserNotFoundException("Pic with "+pic.getId()+" not found"));;
Picture tempPicture = new
Picture(dbPic.getId(),dbPic.getName(),dbPic.getType(),decompressBytes(dbPic.getBytes()));
tempPicture.setCompressed(false);
owner.setProfilePicture(tempPicture);
}
}
Set<Comment> comments = p.getComments();
for(Comment c: comments){
User commentOwner = c.getUserMadeBy();
Picture cpic = commentOwner.getProfilePicture();
if(cpic != null){
if(cpic.isCompressed()){
Picture tempPicture = new
Picture(cpic.getId(),cpic.getName(),cpic.getType(),decompressBytes(cpic.getBytes()));
tempPicture.setCompressed(false);
commentOwner.setProfilePicture(tempPicture);
}
}
}
Set<Picture> newPicts = new HashSet<>();
for(Picture pict : p.getPictures()){
if(pict != null){
if(pict.isCompressed()){
Picture tempPicture = new
Picture(pict.getId(),pict.getName(),pict.getType(),decompressBytes(pict.getBytes()));
tempPicture.setCompressed(false);
newPicts.add(tempPicture);
System.out.println("> Picture compressed and saved saved ");
}else
newPicts.add(pict);
}
}
p.setPictures(newPicts);
/* System.out.println(owner);
System.out.println(p);*/
}
return feedPosts;
}
SOCIAL NETWORKING SITE
22102D020145 23 OF 101
@CrossOrigin(origins = "*")
@PostMapping(value="/in/{id}/feed/new-post", consumes =
{MediaType.MULTIPART_FORM_DATA_VALUE})
public ResponseEntity newPost(@PathVariable Long id,@RequestPart("object") Post
post,@RequestPart(value = "imageFile", required=false) MultipartFile[] files) throws IOException
{
System.out.println("nnn> newPost: "+id);
User currentUser = userRepository.findById(id).orElseThrow(()->new
UserNotFoundException("User with "+id+" not found"));
System.out.println("n> findByIdn");
post.setOwner(currentUser);
System.out.println("n> setOwnern");
if(files!=null){
for(MultipartFile file: files){
Picture pic = new
Picture(file.getOriginalFilename() ,file.getContentType() ,compressBytes(file.getBytes()));
pic.setCompressed(true);
pic.setPost(post);
pictureRepository.save(pic);
System.out.println("> Picture compressed and saved saved ");
}
}
System.out.println("n> to saven");
postRepository.save(post);
System.out.println("nnn> New post made with success");
System.out.println(post);
System.out.println(post.getOwner());
return ResponseEntity.ok(""Post created with success!"");
}
@CrossOrigin(origins = "*")
@PutMapping("/in/{id}/feed/post-interested/{postdId}")
public ResponseEntity newInterestedPost(@PathVariable Long id,@PathVariable Long postdId)
{
System.out.println("> /in/{id}/feed/post-interested/{postdId}");
User currentUser = userRepository.findById(id).orElseThrow(()->new
UserNotFoundException("User with "+id+" not found"));
Post post = postRepository.findById(postdId).orElseThrow(()->new
PostNotFoundException("Post with "+id+" not found"));
// IF reaction exists delete it
for(InterestReaction ir: post.getInterestReactions()) {
if(ir.getUserMadeBy()==currentUser) {
currentUser.getInterestReactions().remove(ir);
currentUser.setInterestReactions(currentUser.getInterestReactions());
SOCIAL NETWORKING SITE
22102D020145 24 OF 101
post.getInterestReactions().remove(ir);
post.setInterestReactions(post.getInterestReactions());
ir.setUserMadeBy(null);
ir.setPost(null);
userRepository.save(currentUser);
postRepository.save(post);
interestReactionRepository.delete(ir);
System.out.println("> Reaction deleted");
System.out.println(post);
return ResponseEntity.ok(""Reaction deleted with success!"");
}
}
InterestReaction newReaction = new InterestReaction(currentUser,post);
User postOwner = post.getOwner();
if(postOwner!=currentUser){
Notification notification = new Notification(INTEREST,postOwner,newReaction);
notificationRepository.save(notification);
}
interestReactionRepository.save(newReaction);
System.out.println("> New reaction made with success");
System.out.println(post);
return ResponseEntity.ok(""Interested in post created with success!"");
}
@CrossOrigin(origins = "*")
@GetMapping("/in/{id}/feed/is-interested/{postdId}")
public ResponseEntity<?> isInterestedPost(@PathVariable Long id, @PathVariable Long
postdId) {
System.out.println("n> ----- Reaction searchn");
InterestReaction isInterested = null;
Post post = postRepository.findById(postdId).orElseThrow(()->new
PostNotFoundException("Post with "+id+" not found"));
User currentUser = userRepository.findById(id).orElseThrow(()->new
UserNotFoundException("User with "+id+" not found"));
for(InterestReaction ir: post.getInterestReactions()) {
if(ir.getUserMadeBy()==currentUser) {
System.out.println("> Reaction found");
return ResponseEntity.ok(ir);
}
}
System.out.println("> "+isInterested);
System.out.println(post);
return ResponseEntity.ok(null);
}
SOCIAL NETWORKING SITE
22102D020145 25 OF 101
@CrossOrigin(origins = "*")
@PutMapping("/in/{id}/feed/new-comment/{postdId}")
public ResponseEntity newComment(@PathVariable Long id,@PathVariable Long
postdId,@RequestBody Comment comment) {
User currentUser = userRepository.findById(id).orElseThrow(()->new
UserNotFoundException("User with "+id+" not found"));
Post post = postRepository.findById(postdId).orElseThrow(()->new
PostNotFoundException("Post with "+id+" not found"));
userService.newPostComment(currentUser,post,comment);
System.out.println("> New comment made with success");
System.out.println(comment);
System.out.println(post);
return ResponseEntity.ok(""Comment in post created with success!"");
}
@CrossOrigin(origins = "*")
@GetMapping("/in/{id}/recommended-posts")
public List<Post> getRecommendedPosts(@PathVariable Long id) {
RecommendationAlgos recAlgos = new RecommendationAlgos();
recAlgos.recommendedPosts(userRepository, postRepository, userService);
List<Post> recommendedPosts = new ArrayList<>();
User currentUser = userRepository.findById(id).orElseThrow(() -> new
UserNotFoundException("User with " + id + " not found"));
System.out.println("nnn 1 ===================================nnn");
if (currentUser.getRecommendedPosts().size() != 0) {
for (Post p : currentUser.getRecommendedPosts()) {
for(Post fp: getFeedPosts(id)){
Long id1 = fp.getId();
Long id2 = p.getId();
if (id1 == id2)
recommendedPosts.add(p);
}
}
}else {
return new ArrayList<>(getFeedPosts(id));
}
System.out.println("nnn 2 ===================================nnn");
Collections.reverse(recommendedPosts);
System.out.println("nnn 3 ===================================nnn");
for(Post p: recommendedPosts) {
User owner = p.getOwner();
Picture pic = owner.getProfilePicture();
if(pic != null){
SOCIAL NETWORKING SITE
22102D020145 26 OF 101
if(pic.isCompressed()){
Picture dbPic = pictureRepository.findById(pic.getId()).orElseThrow(()->new
UserNotFoundException("Pic with "+pic.getId()+" not found"));;
Picture tempPicture = new
Picture(dbPic.getId(),dbPic.getName(),dbPic.getType(),decompressBytes(dbPic.getBytes()));
tempPicture.setCompressed(false);
owner.setProfilePicture(tempPicture);
}
}
Set<Comment> comments = p.getComments();
for(Comment c: comments){
User commentOwner = c.getUserMadeBy();
Picture cpic = commentOwner.getProfilePicture();
if(cpic != null){
if(cpic.isCompressed()){
Picture tempPicture = new
Picture(cpic.getId(),cpic.getName(),cpic.getType(),decompressBytes(cpic.getBytes()));
tempPicture.setCompressed(false);
commentOwner.setProfilePicture(tempPicture);
}
}
}
Set<Picture> newPicts = new HashSet<>();
for(Picture pict : p.getPictures()){
if(pict != null){
if(pict.isCompressed()){
Picture tempPicture = new
Picture(pict.getId(),pict.getName(),pict.getType(),decompressBytes(pict.getBytes()));
tempPicture.setCompressed(false);
newPicts.add(tempPicture);
System.out.println("> Picture compressed and saved saved ");
}else
newPicts.add(pict);
}
}
p.setPictures(newPicts);
/* System.out.println(owner);
System.out.println(p);*/
}
return recommendedPosts;
}
}
JobsController
SOCIAL NETWORKING SITE
22102D020145 27 OF 101
package com.linkedin.linkedinclone.controllers;
import com.linkedin.linkedinclone.exceptions.ObjectExistsException;
import com.linkedin.linkedinclone.exceptions.PostNotFoundException;
import com.linkedin.linkedinclone.exceptions.UserNotFoundException;
import com.linkedin.linkedinclone.model.*;
import com.linkedin.linkedinclone.recommendation.RecommendationAlgos;
import com.linkedin.linkedinclone.repositories.CommentRepository;
import com.linkedin.linkedinclone.repositories.JobsRepository;
import com.linkedin.linkedinclone.repositories.PostRepository;
import com.linkedin.linkedinclone.repositories.UserRepository;
import com.linkedin.linkedinclone.services.UserService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import static com.linkedin.linkedinclone.utils.PictureSave.decompressBytes;
import static jdk.nashorn.internal.objects.Global.println;
@RestController
@AllArgsConstructor
public class JobsController {
@Autowired
UserService userService;
private final UserRepository userRepository;
private final JobsRepository jobRepository ;
private final CommentRepository commentRepository;
@CrossOrigin(origins = "*")
@PostMapping("/in/{id}/new-job")
public ResponseEntity newJob(@PathVariable Long id, @RequestBody Job job) {
System.out.println(job);
User currentUser = userRepository.findById(id).orElseThrow(()->new
UserNotFoundException("User with "+id+" not found"));
job.setUserMadeBy(currentUser);
jobRepository.save(job);
return ResponseEntity.ok(""Job created with success!"");
}
@CrossOrigin(origins = "*")
@GetMapping("/in/{id}/jobs")
public Set<Job> getJobs(@PathVariable Long id) {
SOCIAL NETWORKING SITE
22102D020145 28 OF 101
System.out.println("nngetJobsn");
User currentUser = userRepository.findById(id).orElseThrow(()->new
UserNotFoundException("User with "+id+" not found"));
Set<Job> jobs = new HashSet<>();
/* jobs.addAll(currentUser.getJobsCreated());
Set<User> network = userService.getUserNetwork(currentUser);
for(User u: network){
jobs.addAll(u.getJobsCreated());
}*/
Set<Job> allJobs = new HashSet<>(jobRepository.findAll());
jobs.addAll(allJobs);
System.out.println("n");
for(Job j: jobs) {
System.out.println(j);
User owner = j.getUserMadeBy();
Picture pic = owner.getProfilePicture();
if(pic != null){
if(pic.isCompressed()){
Picture tempPicture = new
Picture(pic.getId(),pic.getName(),pic.getType(),decompressBytes(pic.getBytes()));
pic.setCompressed(false);
owner.setProfilePicture(tempPicture);
}
}
Set<User> usersApplied = j.getUsersApplied();
for(User u: usersApplied) {
Picture cpic = u.getProfilePicture();
if(cpic != null){
if(cpic.isCompressed()){
Picture tempPicture = new
Picture(cpic.getId(),cpic.getName(),cpic.getType(),decompressBytes(cpic.getBytes()));
cpic.setCompressed(false);
u.setProfilePicture(tempPicture);
}
}
}
}
return jobs;
}
SOCIAL NETWORKING SITE
22102D020145 29 OF 101
@CrossOrigin(origins = "*")
@PutMapping("/in/{id}/jobs/make-application/{jobId}")
public ResponseEntity newApplication(@PathVariable Long id, @PathVariable Long jobId) {
System.out.println("nnnewApplicationn");
User currentUser = userRepository.findById(id).orElseThrow(()->new
UserNotFoundException("User with "+id+" not found"));
Job job = jobRepository.findById(jobId).orElseThrow(()->new UserNotFoundException("Job
not found"));
Set<User> usersApplied = job.getUsersApplied();
if(!usersApplied.contains(currentUser)){
usersApplied.add(currentUser);
job.setUsersApplied(usersApplied);
jobRepository.save(job);
}else
return ResponseEntity
.badRequest()
.body("{"timestamp": " + """ + new Date().toString() + "","
+ ""status": 400, "
+ ""error": "Bad Request", "
+ ""message": "Application has already been made!", "
);
return ResponseEntity.ok(""Interested in post created with success!"");
}
@CrossOrigin(origins = "*")
@GetMapping("/in/{id}/jobs/{jobId}/applicants")
public Set<User> getJobApplicants(@PathVariable Long id, @PathVariable Long jobId) {
User currentUser = userRepository.findById(id).orElseThrow(()->new
UserNotFoundException("User with "+id+" not found"));
Job job = jobRepository.findById(jobId).orElseThrow(()->new UserNotFoundException("Job
not found"));
return job.getUsersApplied();
}
@CrossOrigin(origins = "*")
@GetMapping("/in/{id}/recommended-jobs")
public List<Job> getRecommendedJobs(@PathVariable Long id){
RecommendationAlgos recAlgos = new RecommendationAlgos();
recAlgos.recommendedJobs(userRepository, jobRepository, userService);
User currentUser = userRepository.findById(id).orElseThrow(()->new
UserNotFoundException("User with "+id+" not found"));
List<Job> recommendedJobs = new ArrayList<>();
if (currentUser.getRecommendedJobs().size() != 0){
System.out.println("list is null");
recommendedJobs = currentUser.getRecommendedJobs();
} else {
SOCIAL NETWORKING SITE
22102D020145 30 OF 101
return new ArrayList<>(getJobs(id));
}
for (Job j:recommendedJobs ) {
System.out.println(j);
}
System.out.println(recommendedJobs);
Collections.reverse(recommendedJobs);
for(Job j: recommendedJobs) {
System.out.println(j);
User owner = j.getUserMadeBy();
Picture pic = owner.getProfilePicture();
if(pic != null){
if(pic.isCompressed()){
Picture tempPicture = new
Picture(pic.getId(),pic.getName(),pic.getType(),decompressBytes(pic.getBytes()));
tempPicture.setCompressed(false);
owner.setProfilePicture(tempPicture);
}
}
Set<User> usersApplied = j.getUsersApplied();
for(User u: usersApplied) {
Picture cpic = u.getProfilePicture();
if(cpic != null){
if(cpic.isCompressed()){
Picture tempPicture = new
Picture(cpic.getId(),cpic.getName(),cpic.getType(),decompressBytes(cpic.getBytes()));
tempPicture.setCompressed(false);
u.setProfilePicture(tempPicture);
}
}
}
}
return recommendedJobs;
}
}
NetworkController
package com.linkedin.linkedinclone.controllers;
import com.linkedin.linkedinclone.exceptions.UserNotFoundException;
SOCIAL NETWORKING SITE
22102D020145 31 OF 101
import com.linkedin.linkedinclone.model.*;
import com.linkedin.linkedinclone.repositories.*;
import com.linkedin.linkedinclone.services.UserService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;
import static com.google.common.collect.Lists.reverse;
import static com.linkedin.linkedinclone.utils.PictureSave.decompressBytes;
import static com.linkedin.linkedinclone.utils.Utils.minDistance;
@RestController
@AllArgsConstructor
public class NetworkController {
@Autowired
UserService userService;
private final UserRepository userRepository;
private final RoleRepository roleRepository;
private final ConnectionRepository connectionRepository;
private final NotificationRepository notificationRepository;
private final ChatRepository chatRepository;
@CrossOrigin(origins = "*")
//@PreAuthorize("hasRole('PROFESSIONAL')")
@GetMapping("/in/{id}/search/{searchQuery}")
public List<User> search(@PathVariable Long id,@PathVariable String searchQuery) {
User user = userRepository.findById(id).orElseThrow(() -> new
UserNotFoundException("User with id "+id+"doesn't exist"));
List<User> searchResults = new ArrayList<User>();
List<User> allUsers = userService.getAllUsers();
String[] searchQueries = searchQuery.split("W+");
MultiValueMap<Integer,User> map = new LinkedMultiValueMap<>();
for(String s: searchQueries) {
String w = s.toLowerCase();
System.out.println(">>> Lemma: " + s);
for(User u: allUsers){
if((u.getId() != id) && (!u.getName().equals("admin"))){
SOCIAL NETWORKING SITE
22102D020145 32 OF 101
int dist;
System.out.println(u.getName());
if ( (dist = minDistance(w, u.getName().toLowerCase(Locale.ROOT))) < 10){
System.out.println("- "+u.getName()+" "+dist);
map.add(dist, u);
} else if ((dist = minDistance(w,u.getSurname().toLowerCase(Locale.ROOT))) < 10) {
System.out.println("- "+u.getSurname()+" "+dist);
map.add(dist,u);
}else if( (u.getCurrentCompany()!=null &&
u.getCurrentCompany().toLowerCase(Locale.ROOT) == w) || (u.getCurrentJob()!=null &&
u.getCurrentJob().toLowerCase(Locale.ROOT) == w)) {
map.add(1,u);
}
}
}
}
for(Map.Entry m: map.entrySet()){
System.out.println("-- "+m.getValue());
searchResults.addAll((List<User>) m.getValue());
}
for(User u: searchResults){
System.out.println(u.getName());
Picture uPic = u.getProfilePicture();
if(uPic!=null && uPic.isCompressed()) {
Picture temp = new Picture(uPic.getName(), uPic.getType(),
decompressBytes(uPic.getBytes()));
u.setProfilePicture(temp);
}
}
return reverse(searchResults);
}
@CrossOrigin(origins = "*")
//@PreAuthorize("hasRole('PROFESSIONAL')")
@GetMapping("/in/{id}/network")
public Set<User> getNetwork(@PathVariable Long id) {
User currentUser = userRepository.findById(id).orElseThrow(() -> new
UserNotFoundException("User with id "+id+"doesn't exist"));
Set<User> network = new HashSet<>();
Set<Connection> connectionsFollowing = currentUser.getUsersFollowing();
System.out.println("connectionsFollowing");
for(Connection con: connectionsFollowing) {
if(con.getIsAccepted()){
SOCIAL NETWORKING SITE
22102D020145 33 OF 101
User userinNetwork = con.getUserFollowed();
System.out.println(userinNetwork.getName());
network.add(userinNetwork);
}
}
Set<Connection> connectionsFollowedBy = currentUser.getUserFollowedBy();
System.out.println("connectionsFollowedBy");
for(Connection con: connectionsFollowedBy) {
if(con.getIsAccepted()){
User userinNetwork = con.getUserFollowing();
System.out.println(userinNetwork.getName());
network.add(userinNetwork);
}
}
for(User u: network){
System.out.println(u.getName());
Picture uPic = u.getProfilePicture();
if(uPic!=null && uPic.isCompressed()) {
Picture temp = new Picture(uPic.getName(), uPic.getType(),
decompressBytes(uPic.getBytes()));
temp.setCompressed(false);
u.setProfilePicture(temp);
}
}
return network;
}
@CrossOrigin(origins = "*")
//@PreAuthorize("hasRole('PROFESSIONAL')")
@GetMapping("/in/{id}/request/{otherUserId}")
public ResponseEntity<String> hasSendRequest(@PathVariable Long id, @PathVariable Long
otherUserId) {
System.out.println("nn>Check request");
User currentUser = userRepository.findById(id).orElseThrow(() -> new
UserNotFoundException("User with id "+id+"doesn't exist"));
User otherUser = userRepository.findById(otherUserId).orElseThrow(() -> new
UserNotFoundException("User with id "+id+"doesn't exist"));
System.out.println(otherUser.getName());
Set<Connection> connectionsFollowing = currentUser.getUsersFollowing();
System.out.println("connectionsFollowing");
for(Connection con: connectionsFollowing) {
if(!con.getIsAccepted() && con.getUserFollowed()==otherUser){
User userinNetwork = con.getUserFollowed();
SOCIAL NETWORKING SITE
22102D020145 34 OF 101
System.out.println(userinNetwork.getName());
return ResponseEntity.ok("true");
}
}
connectionsFollowing = currentUser.getUserFollowedBy();
System.out.println("----");
for(Connection con: connectionsFollowing) {
if(!con.getIsAccepted() && con.getUserFollowing()==otherUser){
User userinNetwork = con.getUserFollowing();
System.out.println(userinNetwork.getName());
return ResponseEntity.ok("true");
}
}
return ResponseEntity.ok("false");
}
@CrossOrigin(origins = "*")
//@PreAuthorize("hasRole('PROFESSIONAL')")
@PutMapping("/in/{id}/new-connection/{newUserId}")
public ResponseEntity addToConnections(@PathVariable Long id,@PathVariable Long
newUserId) {
System.out.println("New connection request:");
User user = userRepository.findById(id).orElseThrow(() -> new
UserNotFoundException("User with id "+id+"doesn't exist"));
userService.newConnection(user,newUserId);
System.out.println("New connection added with success!");
return ResponseEntity.ok(""New connection added with success!"");
}
@CrossOrigin(origins = "*")
//@PreAuthorize("hasRole('PROFESSIONAL')")
@PutMapping("/in/{id}/notifications/{connectionId}/accept-connection")
public ResponseEntity acceptConnection(@PathVariable Long id,@PathVariable Long
connectionId) {
System.out.println("nnn---------");
User user = userRepository.findById(id).orElseThrow(() -> new
UserNotFoundException("User with id "+id+"doesn't exist"));
System.out.println(user.getName() + " will accept connection id"+ connectionId);
SOCIAL NETWORKING SITE
22102D020145 35 OF 101
Connection conn = connectionRepository.findById(connectionId).orElseThrow(() -> new
UserNotFoundException("Notification with id "+id+"doesn't exist"));
conn.setIsAccepted(true);
connectionRepository.save(conn);
Notification not = notificationRepository.findByConnectionId(connectionId).orElseThrow(()
-> new UserNotFoundException("Notification with id "+id+"doesn't exist"));
not.setIsShown(true);
notificationRepository.save(not);
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yyyy:HH.mm.ss");
Chat chat = new Chat();
chat.setTimestamp(new Timestamp(System.currentTimeMillis()));
Set<User> users = new HashSet<>();
users.add(user);
if(conn.getUserFollowed()!=user)
users.add(conn.getUserFollowed());
else if(conn.getUserFollowing()!=user)
users.add(conn.getUserFollowing());
chat.setUsers(users);
chatRepository.save(chat);
System.out.println("nnn");
System.out.println(chat);
for(User u: users) {
System.out.println(u);
System.out.println(u.getChats());}
return ResponseEntity.ok(""Connection accepted with success!"");
}
/* @CrossOrigin(origins = "*")
//@PreAuthorize("hasRole('PROFESSIONAL')")
@GetMapping("/in/{id}/network/users/{userShownId}")
public UserProfileDTO getNetwork(@PathVariable Long id) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
User currentUser =
userRepository.findUserByUsername(((org.springframework.security.core.userdetails.User)
auth.getPrincipal()).getUsername());
return network;
}*/
}
SOCIAL NETWORKING SITE
22102D020145 36 OF 101
VSWorkSpaceState
{
"ExpandedNodes": [
""
],
"PreviewInSolutionExplorer": false
}
admin-nav.component
#mylogo{
padding-right: 8px;
}
.btn:focus,.btn:active {
outline: none !important;
box-shadow: none;
}
.navbar{
background-color: rgb(255, 255, 255);
}
.navbar-nav .nav-link{
font-size: 18px;
}
#set-btn{
color: #262626;
text-decoration: none;
}
/* Color of the links BEFORE scroll */
.navbar-scroll .nav-link,
.navbar-scroll .navbar-toggler-icon,
.navbar-scroll .navbar-brand {
color: #262626;
}
/* Color of the navbar BEFORE scroll */
.navbar-scroll {
background-color: #FFC017;
}
/* Color of the links AFTER scroll */
SOCIAL NETWORKING SITE
22102D020145 37 OF 101
.navbar-scrolled .nav-link,
.navbar-scrolled .navbar-toggler-icon,
.navbar-scroll .navbar-brand {
color: #262626;
}
/* Color of the navbar AFTER scroll */
.navbar-scrolled {
background-color: #fff;
}
/* An optional height of the navbar AFTER scroll */
.navbar.navbar-scroll.navbar-scrolled {
padding-top: auto;
padding-bottom: auto;
}
.search-area input {
background-color:#e4f2fd;
color:white;
border: 0;
}
.logout-btn{
background-color: #158eff;
color:white;
border: 0;
}
.logout-btn:hover{
background-color: #0078e9;
}
.users-btn{
background-color: #004b91;
color:white;
border: 0;
}
.users-btn:hover{
background-color: #01417e;
}
admin.component
.more-btn:focus,.more-btn:active {
outline: none !important;
SOCIAL NETWORKING SITE
22102D020145 38 OF 101
box-shadow: none !important;
border-color: none;
}
.container{
font-family: sans-serif;
}
.btn-download{
color: white;
border-color: #004b91;
background-color: #004b91;
}
.btn-download:hover{
background-color: #01417e;
}
error.component
div{
text-align: center;
margin-top: 5vh;
}
feed.component
#feedcards{
margin-top: 8%;
width: 100%;
}
#profileCard{
width: 80%;
font-family: 'Helvetica';
}
#networkCard{
width: 80%;
font-family: 'Helvetica';
margin-top:5%;
}
#diversCard {
margin-left: 20%;
}
SOCIAL NETWORKING SITE
22102D020145 39 OF 101
#profile-image{
width: 50%;
border-radius: 50%;
margin-top: 5%;
}
#allPosts{
margin-bottom: 15%;
/* padding-left: 2%; */
}
.profile-btn{
background-color: #158eff;
color: white;
}
#postCard{
background-color: white;
}
Footer.component
.footer {
position:fixed;
bottom: 0;
width: 100%;
background-color: #158eff;
color: white;
text-align: center;
font-size: 10pt;
overflow: hidden;
z-index: 2;
}
@media screen and (max-height: 450px) {
.footer {
display: none;
}
}
Jobs
#jobCards{
SOCIAL NETWORKING SITE
22102D020145 40 OF 101
margin-top: 8%;
width: 100%;
}
.job-btn{
background-color: #158eff;
color: white;
text-align: center;
margin-top: 30px;
width: 30%;
border:none;
font-size: 18px;
}
.applicant{
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 15px;
font-size: large;
padding: 5px;
color: white;
background-color: rgb(13, 175, 100) ;
font-size: 1.1em;
display: inline-flex;
text-decoration: none;
cursor: pointer;
}
ul {
list-style: none;
}
#applicants li{
display: inline-flex;
margin-right: 10px;
margin-top: 10px;
}
#applicants li span{
text-decoration: none;
}
Messaging
.container{
SOCIAL NETWORKING SITE
22102D020145 41 OF 101
margin-top: 6%;
padding-bottom: 2%;
}
img{ max-width:100%;}
.inbox_people {
background: #f8f8f8 none repeat scroll 0 0;
float: left;
overflow: hidden;
width: 40%; border-right:1px solid #c4c4c4;
}
.inbox_msg {
border: 1px solid #c4c4c4;
clear: both;
overflow: hidden;
}
.top_spac{ margin: 20px 0 0;}
.recent_heading {float: left; width:40%;}
.srch_bar {
display: inline-block;
text-align: right;
width: 60%;
}
.headind_srch{ padding:10px 29px 10px 20px; overflow:hidden; border-bottom:1px solid
#c4c4c4;}
.recent_heading h4 {
color: #158eff;
font-size: 21px;
margin: auto;
}
/* .srch_bar input{ border:1px solid #cdcdcd; border-width:0 0 1px 0; width:80%; padding:2px 0
4px 6px; background:none;}
.srch_bar .input-group-addon button {
background: rgba(0, 0, 0, 0) none repeat scroll 0 0;
border: medium none;
padding: 0;
color: #707070;
font-size: 18px;
}
.srch_bar .input-group-addon { margin: 0 0 0 -27px;} */
.chat_ib h5{
font-size:15px;
color:#464646;
margin:0 0 8px 0;
}
SOCIAL NETWORKING SITE
22102D020145 42 OF 101
.chat_ib h5 span{
font-size:13px;
float:right;
}
.chat_ib p{
font-size:14px;
color:#989898;
margin:auto;
position: relative;
/* float:right; */
display: inline-block;
position: relative;
}
.chat_img {
float: left;
width: 11%;
}
.chat_ib {
float: left;
padding: 0 0 0 15px;
width: 88%;
}
.chat_people{ overflow:hidden; clear:both;}
.chat_list {
border-bottom: 1px solid #c4c4c4;
margin: 0;
padding: 18px 16px 10px;
cursor: pointer;
}
.inbox_chat { height: 550px; overflow-y: scroll;}
.active_chat{ background:#ebebeb;}
.incoming_msg_img {
display: inline-block;
width: 6%;
}
.received_msg {
display: inline-block;
padding: 0 0 0 10px;
vertical-align: top;
width: 92%;
}
.received_withd_msg p {
background: #ebebeb none repeat scroll 0 0;
border-radius: 3px;
SOCIAL NETWORKING SITE
22102D020145 43 OF 101
color: #646464;
font-size: 14px;
margin: 0;
padding: 5px 10px 5px 12px;
width: 100%;
}
.time_date {
color: #747474;
display: block;
font-size: 12px;
margin: 8px 0 0;
}
.received_withd_msg { width: 57%;}
.mesgs {
float: left;
padding: 30px 15px 0 25px;
width: 60%;
}
.sent_msg p {
background: #158eff none repeat scroll 0 0;
border-radius: 3px;
font-size: 14px;
margin: 0; color:#fff;
padding: 5px 10px 5px 12px;
width:100%;
}
.outgoing_msg{ overflow:hidden; margin:26px 0 26px;}
.sent_msg {
float: right;
width: 46%;
}
.input_msg_write input {
background: rgba(0, 0, 0, 0) none repeat scroll 0 0;
border: 0;
color: #4c4c4c;
font-size: 15px;
min-height: 48px;
width: 100%;
}
.type_msg {
border-top: 1px solid #c4c4c4;
position: relative;
margin-bottom: 2%;
}
.msg_send_btn {
background: #158eff none repeat scroll 0 0;
SOCIAL NETWORKING SITE
22102D020145 44 OF 101
border: medium none;
border-radius: 50%;
color: #fff;
cursor: pointer;
font-size: 17px;
height: 33px;
position: absolute;
right: 0;
top: 11px;
width: 33px;
margin-right: 5px;
margin-top: 2px;
}
.messaging {
padding: 0 0 0 0;
/* height: max-content; */
}
.msg_history {
height: 516px;
overflow-y: auto;
display: flex; flex-direction: column-reverse;
}
.input_msg_write input:focus, .input_msg_write input:active{
border: 0;
outline: none;
}
.input_msg_write input{
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 15px;
background-color:white;
margin-top: 5px;
padding-left: 10px;
}
navbar.component
#mylogo{
padding-right: 8px;
}
.btn:focus,.btn:active {
outline: none !important;
box-shadow: none;
}
SOCIAL NETWORKING SITE
22102D020145 45 OF 101
.navbar{
background-color: rgb(255, 255, 255);
}
.navbar-nav .nav-link{
font-size: 18px;
}
#set-btn{
color: #262626;
text-decoration: none;
}
/* Color of the links BEFORE scroll */
.navbar-scroll .nav-link,
.navbar-scroll .navbar-toggler-icon,
.navbar-scroll .navbar-brand {
color: #262626;
}
/* Color of the navbar BEFORE scroll */
.navbar-scroll {
background-color: #FFC017;
}
/* Color of the links AFTER scroll */
.navbar-scrolled .nav-link,
.navbar-scrolled .navbar-toggler-icon,
.navbar-scroll .navbar-brand {
color: #262626;
}
/* Color of the navbar AFTER scroll */
.navbar-scrolled {
background-color: #fff;
}
/* An optional height of the navbar AFTER scroll */
.navbar.navbar-scroll.navbar-scrolled {
padding-top: auto;
padding-bottom: auto;
}
.search-area input {
background-color:#e4f2fd;
color:white;
border: 0;
}
SOCIAL NETWORKING SITE
22102D020145 46 OF 101
network.component
.search-bar {
width: 400px;
display: flex;
flex-grow: 1;
justify-content: center;
/* z-index: -1; */
}
.input-group.search-box {
align-content: center;
}
.form-control.search {
height: 50px;
outline: none !important;
box-shadow: none;
}
.search-bar .input-group {
width: 100%;
}
.search-area:focus,.search-area:active {
outline: none !important;
box-shadow: none !important;
border-color: none;
}
.search-button {
height: 50px;
background-color: #158eff;
outline: none !important;
box-shadow: none;
border: none;
}
.btn.search-button:hover,
.btn.search-button:active {
background-color: #158eff;
border-color: inherit;
-webkit-box-shadow: none;
outline: none !important;
box-shadow: none;
border: none;
}
.btn.search-button:disabled {
SOCIAL NETWORKING SITE
22102D020145 47 OF 101
background-color: #158eff;
border-color: inherit;
-webkit-box-shadow: none;
box-shadow: none;
border: none;
}
Postsinfeed.component
.text-post{
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 10px;
background-color:rgb(240, 240, 240);
}
.text-post:focus,.text-post:active {
outline: none !important;
box-shadow: none !important;
border-color: none;
}
.posts {
/* padding-top: 40px; */
background-color:transparent;
/* margin-bottom: 50px; */
border-color: none;
border: none;
}
.card {
/* border: none; */
background-color:rgb(255, 255, 255);
width: 100%;
margin-bottom: 10%;
/* border-radius: 0%; */
border-color: rgb(224, 224, 224);
border-width: 2px;
}
.card-body {
width:100%;
/* padding: 0%; */
position: relative;
}
SOCIAL NETWORKING SITE
22102D020145 48 OF 101
.container {
/* margin-bottom: 10px; */
border: none;
}
.stretch-card>.card {
width: 100%;
min-width: 100%
}
.flex {
-webkit-box-flex: 1;
-ms-flex: 1 1 auto;
flex: 1 1 auto
}
@media (max-width:991.98px) {
.padding {
padding: 1.5rem
}
}
@media (max-width:767.98px) {
.padding {
padding: 1rem
}
}
.padding {
padding: 3rem
}
.box-widget {
border: none;
position: relative
}
.box {
position: relative;
/* border-radius: 3px; */
background: #ffffff;
/* border-top: 3px solid #d2d6de; */
/* margin-bottom: 30px; */
width: 100%;
border: none;
/* box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1) */
}
SOCIAL NETWORKING SITE
22102D020145 49 OF 101
.box-header.with-border {
border-bottom: 3px solid #f4f4f4
}
.box-header {
color: #444;
display: block;
padding: 10px;
position: relative
}
.user-block img {
width: 40px;
height: 40px;
float: left
}
.img-circle {
border-radius: 50%
}
.user-block .username {
font-size: 16px;
font-weight: 600
}
.username a {
text-decoration: none
}
.user-block .username,
.user-block .description,
.user-block .comment {
display: block;
float: left;
/* margin-left: 50px */
}
.user-block .description {
float: left;
color: #999;
font-size: 13px;
}
.user-block .username,
.user-block .description,
.user-block .comment {
margin-left: 20px;
SOCIAL NETWORKING SITE
22102D020145 50 OF 101
display: block;
}
.user-block:after {
clear: both
}
.user-block:before,
.user-block:after {
content: "";
display: table
}
.box-body .content {
padding: 5px;
}
.box-header>.box-tools {
position: absolute;
right: 10px;
top: 5px
}
.box-header>.box-tools [data-toggle="tooltip"] {
position: relative
}
.btn {
border-radius: 3px;
-webkit-box-shadow: none;
box-shadow: none;
border: 1px solid transparent
}
.btn-box-tool {
padding: 5px;
font-size: 12px;
background: transparent;
color: #97a0b3
}
.box-header:after,
.box-body:after,
.box-footer:after {
clear: both
}
.box-body {
SOCIAL NETWORKING SITE
22102D020145 51 OF 101
border: none;
/* padding: 10px */
}
.pad {
padding: 10px
}
.img-responsive,
.thumbnail a>img,
.thumbnail>img {
display: block;
max-width: 100%;
height: auto
}
p {
margin: 0 0 10px
}
.btn-default {
background-color: #f4f4f4;
color: #444;
border-color: #ddd
}
.btn {
border-radius: 3px;
-webkit-box-shadow: none;
box-shadow: none;
border: 1px solid transparent
}
.btn-group-xs>.btn,
.btn-xs {
padding: 1px 5px;
font-size: 12px;
line-height: 1.5;
border-radius: 3px
}
.btn-default {
color: #333;
background-color: #fff;
border-color: #ccc
}
.pull-right {
SOCIAL NETWORKING SITE
22102D020145 52 OF 101
float: right !important
}
.text-muted {
color: #777;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 1.42857143;
color: #333;
background-color: #fff
}
.box-comments {
background: #f7f7f7
}
.box-footer {
border-top-left-radius: 0;
border-top-right-radius: 0;
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px;
border-top: 1px solid #f4f4f4;
padding: 10px
}
.box-comments .box-comment:first-of-type {
padding-top: 0
}
.box-comments .box-comment {
padding: 8px 0;
border-bottom: 1px solid #eee
}
.box-comments .box-comment:before,
.box-comments .box-comment:after {
content: "";
display: table
}
.img-sm,
.box-comments .box-comment img,
.user-block.user-block-sm img {
width: 30px !important;
height: 30px !important
}
.img-sm,
SOCIAL NETWORKING SITE
22102D020145 53 OF 101
.img-md,
.img-lg,
.box-comments .box-comment img,
.user-block.user-block-sm img {
float: left
}
.box-comments .comment-text {
margin-left: 40px;
color: #555
}
.box-comments .username {
color: #444;
display: block;
font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;
overflow-x: hidden;
overflow-y: auto
}
.box-comments .text-muted {
font-weight: 400;
font-size: 12px;
background-color: #f7f7f7
}
.box-footer {
/* border-top-left-radius: 0;
border-top-right-radius: 0;
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px;
border-top: 1px solid #f4f4f4; */
padding: 10px
}
.box-header:before,
.box-body:before,
.box-footer:before,
.box-header:after,
.box-body:after,
.box-footer:after {
content: "";
display: table
}
.img-sm,
.box-comments .box-comment img,
.user-block.user-block-sm img {
SOCIAL NETWORKING SITE
22102D020145 54 OF 101
width: 30px !important;
height: 30px !important
}
.img-sm {
float: left
}
.img-sm+.img-push {
margin-left: 40px
}
}
},
"free": [
"brands"
]
},
"jira": {
"changes": [
"5.6.0"
],
"ligatures": [],
"search": {
"terms": [
"atlassian"
]
},
"styles": [
"brands"
],
"unicode": "f7b1",
"label": "Jira",
"voted": true,
"svg": {
"brands": {
"last_modified": 1546440861000,
"raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path
d="M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0
28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-
241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z"/></svg>",
"viewBox": [
"0",
"0",
"496",
"512"
],
SOCIAL NETWORKING SITE
22102D020145 55 OF 101
"width": 496,
"height": 512,
"path": "M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7
0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm-
241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z"
}
},
"free": [
"brands"
]
},
"joget": {
"changes": [
"5.0.0"
],
"ligatures": [],
"search": {
"terms": []
},
"styles": [
"brands"
],
"unicode": "f3b7",
"label": "Joget",
"voted": false,
"svg": {
"brands": {
"last_modified": 1548363722332,
"raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path
d="M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81
341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-110.4 101.5-
182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1
176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-58.5-48.2s51.1-
40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7
28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6-
230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5
31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3
31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z"/></svg>",
"viewBox": [
"0",
"0",
"496",
"512"
],
"width": 496,
"height": 512,
"path": "M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6
269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-
SOCIAL NETWORKING SITE
22102D020145 56 OF 101
110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-
67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-
58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-
8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-
24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1
8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-
31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z"
}
},
"free": [
"brands"
]
},
"joint": {
"changes": [
"5.1.0"
],
"ligatures": [],
"search": {
"terms": [
"blunt",
"cannabis",
"doobie",
"drugs",
"marijuana",
"roach",
"smoke",
"smoking",
"spliff"
]
},
"styles": [
"solid"
],
"unicode": "f595",
"label": "Joint",
"voted": false,
"svg": {
"solid": {
"last_modified": 1628088635559,
"raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path
d="M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58
8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-
3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03
370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-
37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-
48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576
249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-
SOCIAL NETWORKING SITE
22102D020145 57 OF 101
162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07
512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987
63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z"/></svg>",
"viewBox": [
"0",
"0",
"640",
"512"
],
"width": 640,
"height": 512,
"path": "M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42
0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-
4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97
358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79
380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-
16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64
55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-
30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8
137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-
22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-
24V376c0-13.26-10.75-24-24-24z"
}
},
"free": [
"solid"
]
},
"joomla": {
"changes": [
"4.1",
"5.0.0"
],
"ligatures": [],
"search": {
"terms": []
},
"styles": [
"brands"
],
"unicode": "f1aa",
"label": "Joomla Logo",
"voted": false,
"svg": {
"brands": {
"last_modified": 1546440861000,
"raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path
d="M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3
SOCIAL NETWORKING SITE
22102D020145 58 OF 101
44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7-
49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3
44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-
31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4
22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-
32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-
12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0
59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-
14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-
26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6
94.2-26 32.1-32 12.2-12.4 99.5-99.7z"/></svg>",
"viewBox": [
"0",
"0",
"448",
"512"
],
"width": 448,
"height": 512,
"path": "M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-
44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-
49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3
44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2-
31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4
22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2-
32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9-
12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0
59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8-
14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3-
26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6
94.2-26 32.1-32 12.2-12.4 99.5-99.7z"
}
},
"free": [
"brands"
]
},
"journal-whills": {
"changes": [
"5.3.0",
"5.11.0"
],
"ligatures": [],
"search": {
"terms": [
"book",
"force",
"jedi",
SOCIAL NETWORKING SITE
22102D020145 59 OF 101
"sith",
"star wars",
"yoda"
]
},
"styles": [
"solid"
],
"unicode": "f66a",
"label": "Journal of the Whills",
"voted": false,
"svg": {
"solid": {
"last_modified": 1628088635560,
"raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path
d="M438.40625,377.59375c-3.20313,12.8125-
3.20313,57.60937,0,73.60937Q447.9922,460.78907,448,470.40625v16c0,16-12.79688,25.59375-
25.59375,25.59375H96c-54.40625,0-96-41.59375-96-
96V96C0,41.59375,41.59375,0,96,0H422.40625C438.40625,0,448,9.59375,448,25.59375v332.812
5Q448,372.79688,438.40625,377.59375ZM380.79688,384H96c-16,0-32,12.79688-
32,32s12.79688,32,32,32H380.79688ZM128.01562,176.01562c0,.51563.14063.98438.14063,1.5l3
7.10937,32.46876A7.99954,7.99954,0,0,1,160,224h-.01562a9.17678,9.17678,0,0,1-5.25-
1.98438L131.14062,201.375C142.6875,250.95312,186.90625,288,240,288s97.3125-
37.04688,108.875-86.625l-23.59375,20.64062a8.02516,8.02516,0,0,1-
5.26563,1.96876H320a9.14641,9.14641,0,0,1-6.01562-
2.71876A9.26508,9.26508,0,0,1,312,216a9.097,9.097,0,0,1,2.73438-6.01562l37.10937-
32.46876c.01563-.53124.15625-1,.15625-1.51562,0-11.04688-2.09375-21.51562-5.06251-
31.59375l-21.26562,21.25a8.00467,8.00467,0,0,1-11.32812-11.3125l26.42187-
26.40625a111.81517,111.81517,0,0,0-46.35937-49.26562,63.02336,63.02336,0,0,1-
14.0625,82.64062A55.83846,55.83846,0,0,1,251.625,254.73438l-1.42188-
34.28126,12.67188,8.625a3.967,3.967,0,0,0,2.25.6875,3.98059,3.98059,0,0,0,3.43749-6.03124l-
8.53124-14.3125,17.90625-3.71876a4.00647,4.00647,0,0,0,0-7.84374l-17.90625-3.71876,8.53124-
14.3125a3.98059,3.98059,0,0,0-3.43749-6.03124,4.726,4.726,0,0,0-
2.25.67187L248.6875,184.125,244,71.82812a4.00386,4.00386,0,0,0-8,0l-4.625,110.8125-12-
8.15624a4.003,4.003,0,0,0-
5.68751,5.35937l8.53126,14.3125L204.3125,197.875a3.99686,3.99686,0,0,0,0,7.82812l17.90625,3
.73438-
8.53126,14.29688a4.72469,4.72469,0,0,0-.56249,2.04687,4.59547,4.59547,0,0,0,1.25,2.90625,4.01
059,4.01059,0,0,0,2.75,1.09375,4.09016,4.09016,0,0,0,2.25-.6875l10.35937-
7.04687L228.375,254.76562a55.86414,55.86414,0,0,1-28.71875-
93.45312,63.01119,63.01119,0,0,1-14.04688-82.65625,111.93158,111.93158,0,0,0-
46.375,49.26563l26.42187,26.42187a7.99917,7.99917,0,0,1-11.3125,11.3125l-21.26563-
21.26563C130.09375,154.48438,128,164.95312,128.01562,176.01562Z"/></svg>",
"viewBox": [
"0",
"0",
"448",
"512"
SOCIAL NETWORKING SITE
22102D020145 60 OF 101
],
"width": 448,
"height": 512,
"path": "M438.40625,377.59375c-3.20313,12.8125-
3.20313,57.60937,0,73.60937Q447.9922,460.78907,448,470.40625v16c0,16-12.79688,25.59375-
25.59375,25.59375H96c-54.40625,0-96-41.59375-96-
96V96C0,41.59375,41.59375,0,96,0H422.40625C438.40625,0,448,9.59375,448,25.59375v332.812
5Q448,372.79688,438.40625,377.59375ZM380.79688,384H96c-16,0-32,12.79688-
32,32s12.79688,32,32,32H380.79688ZM128.01562,176.01562c0,.51563.14063.98438.14063,1.5l3
7.10937,32.46876A7.99954,7.99954,0,0,1,160,224h-.01562a9.17678,9.17678,0,0,1-5.25-
1.98438L131.14062,201.375C142.6875,250.95312,186.90625,288,240,288s97.3125-
37.04688,108.875-86.625l-23.59375,20.64062a8.02516,8.02516,0,0,1-
5.26563,1.96876H320a9.14641,9.14641,0,0,1-6.01562-
2.71876A9.26508,9.26508,0,0,1,312,216a9.097,9.097,0,0,1,2.73438-6.01562l37.10937-
32.46876c.01563-.53124.15625-1,.15625-1.51562,0-11.04688-2.09375-21.51562-5.06251-
31.59375l-21.26562,21.25a8.00467,8.00467,0,0,1-11.32812-11.3125l26.42187-
26.40625a111.81517,111.81517,0,0,0-46.35937-49.26562,63.02336,63.02336,0,0,1-
14.0625,82.64062A55.83846,55.83846,0,0,1,251.625,254.73438l-1.42188-
34.28126,12.67188,8.625a3.967,3.967,0,0,0,2.25.6875,3.98059,3.98059,0,0,0,3.43749-6.03124l-
8.53124-14.3125,17.90625-3.71876a4.00647,4.00647,0,0,0,0-7.84374l-17.90625-3.71876,8.53124-
14.3125a3.98059,3.98059,0,0,0-3.43749-6.03124,4.726,4.726,0,0,0-
2.25.67187L248.6875,184.125,244,71.82812a4.00386,4.00386,0,0,0-8,0l-4.625,110.8125-12-
8.15624a4.003,4.003,0,0,0-
5.68751,5.35937l8.53126,14.3125L204.3125,197.875a3.99686,3.99686,0,0,0,0,7.82812l17.90625,3
.73438-
8.53126,14.29688a4.72469,4.72469,0,0,0-.56249,2.04687,4.59547,4.59547,0,0,0,1.25,2.90625,4.01
059,4.01059,0,0,0,2.75,1.09375,4.09016,4.09016,0,0,0,2.25-.6875l10.35937-
7.04687L228.375,254.76562a55.86414,55.86414,0,0,1-28.71875-
93.45312,63.01119,63.01119,0,0,1-14.04688-82.65625,111.93158,111.93158,0,0,0-
46.375,49.26563l26.42187,26.42187a7.99917,7.99917,0,0,1-11.3125,11.3125l-21.26563-
21.26563C130.09375,154.48438,128,164.95312,128.01562,176.01562Z"
}
},
"free": [
"solid"
]
},
"js": {
"changes": [
"5.0.0"
],
"ligatures": [],
"search": {
"terms": []
},
"styles": [
"brands"
],
SOCIAL NETWORKING SITE
22102D020145 61 OF 101
"unicode": "f3b8",
"label": "JavaScript (JS)",
"voted": false,
"svg": {
"brands": {
"last_modified": 1546440861001,
"raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M0
32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-
20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1
0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-
19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3
59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5
4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"/></svg>",
"viewBox": [
"0",
"0",
"448",
"512"
],
"width": 448,
"height": 512,
"path": "M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-
63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-
26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5
25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5
0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1
7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7
58.6z"
}
},
"free": [
"brands"
]
},
"js-square": {
"changes": [
"5.0.0",
"5.0.3"
],
"ligatures": [],
"search": {
"terms": []
},
"styles": [
"brands"
],
"unicode": "f3b9",
"label": "JavaScript (JS) Square",
SOCIAL NETWORKING SITE
22102D020145 62 OF 101
"voted": false,
"svg": {
"brands": {
"last_modified": 1546440861000,
"raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path
d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-
26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3-
20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1
0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-
19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3
59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5
4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"/></svg>",
"viewBox": [
"0",
"0",
"448",
"512"
],
"width": 448,
"height": 512,
"path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-
48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-
38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6
63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-
14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0
46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9
25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"
}
},
"free": [
"brands"
]
},
"jsfiddle": {
"changes": [
"4.1",
"5.0.0"
],
"ligatures": [],
"search": {
"terms": []
},
"styles": [
"brands"
],
"unicode": "f1cc",
"label": "jsFiddle",
"voted": false,
SOCIAL NETWORKING SITE
22102D020145 63 OF 101
"svg": {
"brands": {
"last_modified": 1546440861001,
"raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path
d="M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-
49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-
3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-
36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-
41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539
84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-
11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-
56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-
95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-
23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269
5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37
7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142
144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-
44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272
3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-
5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-
35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146
66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-
17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975
6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714
49.108 44.366 42.76 78.186z"/></svg>",
"viewBox": [
"0",
"0",
"576",
"512"
],
"width": 576,
"height": 512,
"path": "M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-
33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-
65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-
25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-
56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031
60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-
87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-
71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-
76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-
11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146
72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294
97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829
74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-
16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-
14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-
SOCIAL NETWORKING SITE
22102D020145 64 OF 101
9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863
29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965
22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558
15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917
8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-
28.214 31.429 11.714 49.108 44.366 42.76 78.186z"
}
},
"free": [
"brands"
]
},
"kaaba": {
"changes": [
"5.3.0"
],
"ligatures": [],
"search": {
"terms": [
"building",
"cube",
"islam",
"muslim"
]
},
"styles": [
"solid"
],
"unicode": "f66b",
"label": "Kaaba",
"voted": false,
"svg": {
"solid": {
"last_modified": 1628088635560,
"raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path
d="M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006 32.006 0 0 0 0
113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77-8.81-26-21.88-
30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12 53.8a95.937 95.937 0
0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l-274.2-82.26c-9.04-2.72-
18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80 21.82C37.02 261.03 32 257.2 32
251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm144-
39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11-2.44-10.11-7.72v-16.58c0-3.61 2.41-
6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm176 22.7c0-5.28 5.02-9.11
10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-80-
21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28 5.02-9.11 10.11-7.72l96
26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96-26.18a7.997 7.997 0 0 1-
5.89-7.72v-16.58z"/></svg>",
"viewBox": [
SOCIAL NETWORKING SITE
22102D020145 65 OF 101
"0",
"0",
"576",
"512"
],
"width": 576,
"height": 512,
"path": "M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006
32.006 0 0 0 0 113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77-
8.81-26-21.88-30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12
53.8a95.937 95.937 0 0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l-
274.2-82.26c-9.04-2.72-18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80
21.82C37.02 261.03 32 257.2 32 251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39
10.11 2.44 10.11 7.72v16.58zm144-39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11-
2.44-10.11-7.72v-16.58c0-3.61 2.41-6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11
7.72v16.58zm176 22.7c0-5.28 5.02-9.11 10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0
5.28-5.02 9.11-10.11 7.72l-80-21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28
5.02-9.11 10.11-7.72l96 26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96-
26.18a7.997 7.997 0 0 1-5.89-7.72v-16.58z"
}
},
"free": [
"solid"
]
},
"kaggle": {
"changes": [
"5.2.0",
"5.8.0"
],
"ligatures": [],
"search": {
"terms": []
},
"styles": [
"brands"
],
"unicode": "f5fa",
"label": "Kaggle",
"voted": true,
"svg": {
"brands": {
"last_modified": 1558987775901,
"raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path
d="M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-10.5
5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v-
109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z"/></svg>",
"viewBox": [
SOCIAL NETWORKING SITE
22102D020145 66 OF 101
"0",
"0",
"320",
"512"
],
"width": 320,
"height": 512,
"path": "M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-
10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v-
109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z"
}
},
"free": [
"brands"
]
},
"key": {
"changes": [
"1",
"5.0.0",
"5.10.1"
],
"ligatures": [],
"search": {
"terms": [
"lock",
"password",
"private",
"secret",
"unlock"
]
},
"styles": [
"solid"
],
"unicode": "f084",
"label": "key",
"voted": false,
"svg": {
"solid": {
"last_modified": 1628088635561,
"raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path
d="M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012
27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-
10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-
16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999
0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-
48-48-48-48 21.49-48 48z"/></svg>",
SOCIAL NETWORKING SITE
22102D020145 67 OF 101
"viewBox": [
"0",
"0",
"512",
"512"
],
"width": 512,
"height": 512,
"path": "M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-
3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-
40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47
7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001
335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-
48-21.49-48-48-48-48 21.49-48 48z"
}
},
"free": [
"solid"
]
},
"keybase": {
"changes": [
"5.0.11",
"5.8.0",
"5.10.2",
"5.11.0"
],
"ligatures": [],
"search": {
"terms": []
},
"styles": [
"brands"
],
"unicode": "f4f5",
"label": "Keybase",
"voted": true,
"svg": {
"brands": {
"last_modified": 1568817883851,
"raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path
d="M286.17 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18zm111.92-147.6c-9.5-14.62-39.37-52.45-
87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0-47.88-104.13c-12.41-4.1-23.33-6-32.41-
5.77-.6-2-1.89-11 9.4-35L198.66 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0-
8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27
19.75 50.21 47.63 51.85l8.93.54a214 214 0 0 0-46.29 35.54C14 304.66 14 374 14
429.77v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-
1.87 10-6.92 3.75-20.11a178.29 178.29 0 0 1-15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf
WT 2.pdf

More Related Content

Similar to WT 2.pdf

Lesson 1 - Introduction to Information and Communication Technology.pptx
Lesson 1 -  Introduction to Information and Communication Technology.pptxLesson 1 -  Introduction to Information and Communication Technology.pptx
Lesson 1 - Introduction to Information and Communication Technology.pptxMalakasMacky
 
Lesson-1-Introduction-to-ICT...............................
Lesson-1-Introduction-to-ICT...............................Lesson-1-Introduction-to-ICT...............................
Lesson-1-Introduction-to-ICT...............................ssuser9cd7f3
 
introduction to ICT.pptx
introduction to ICT.pptxintroduction to ICT.pptx
introduction to ICT.pptxJennifer911572
 
L1 Introduction to Information and Communication Technology.pptx
L1 Introduction to Information and Communication Technology.pptxL1 Introduction to Information and Communication Technology.pptx
L1 Introduction to Information and Communication Technology.pptxizarahmendoza
 
Final abstract
Final abstractFinal abstract
Final abstractanamika99
 
Social networking website
Social networking websiteSocial networking website
Social networking websitekamaljune
 
Salahuddin social media tools
Salahuddin social media toolsSalahuddin social media tools
Salahuddin social media toolssuklimon
 
L1 Introduction to Information and Communication Technology.pptx
L1 Introduction to Information and Communication Technology.pptxL1 Introduction to Information and Communication Technology.pptx
L1 Introduction to Information and Communication Technology.pptxCherryLim21
 
Anahita Social Engine - Vancouver Demo Camp Edition
Anahita Social Engine - Vancouver Demo Camp EditionAnahita Social Engine - Vancouver Demo Camp Edition
Anahita Social Engine - Vancouver Demo Camp EditionRastin Mehr
 
online blogging system
online blogging systemonline blogging system
online blogging system001vaibhav
 
On Social E Learning
On Social E LearningOn Social E Learning
On Social E LearningMegaVjohnson
 
EMPTECH-LESSONnkkkkkhkhkkhbnnknmn-1.pptx
EMPTECH-LESSONnkkkkkhkhkkhbnnknmn-1.pptxEMPTECH-LESSONnkkkkkhkhkkhbnnknmn-1.pptx
EMPTECH-LESSONnkkkkkhkhkkhbnnknmn-1.pptxJerickRemoyan
 
Social Media and Social Book Marking
Social Media and Social Book Marking Social Media and Social Book Marking
Social Media and Social Book Marking Shahjahan Siraj
 

Similar to WT 2.pdf (20)

(MAKAV).pptx
(MAKAV).pptx(MAKAV).pptx
(MAKAV).pptx
 
Veb 2.0 rečnik, brošura
Veb 2.0 rečnik, brošuraVeb 2.0 rečnik, brošura
Veb 2.0 rečnik, brošura
 
Cwc Meets Web 2.0 Mb
Cwc Meets Web 2.0 MbCwc Meets Web 2.0 Mb
Cwc Meets Web 2.0 Mb
 
Lesson 1 - Introduction to Information and Communication Technology.pptx
Lesson 1 -  Introduction to Information and Communication Technology.pptxLesson 1 -  Introduction to Information and Communication Technology.pptx
Lesson 1 - Introduction to Information and Communication Technology.pptx
 
Lesson-1-Introduction-to-ICT...............................
Lesson-1-Introduction-to-ICT...............................Lesson-1-Introduction-to-ICT...............................
Lesson-1-Introduction-to-ICT...............................
 
introduction to ICT.pptx
introduction to ICT.pptxintroduction to ICT.pptx
introduction to ICT.pptx
 
Oral recitations
Oral recitationsOral recitations
Oral recitations
 
L1 Introduction to Information and Communication Technology.pptx
L1 Introduction to Information and Communication Technology.pptxL1 Introduction to Information and Communication Technology.pptx
L1 Introduction to Information and Communication Technology.pptx
 
Final abstract
Final abstractFinal abstract
Final abstract
 
web2.0 forum presentation
web2.0 forum presentationweb2.0 forum presentation
web2.0 forum presentation
 
Social networking website
Social networking websiteSocial networking website
Social networking website
 
Salahuddin social media tools
Salahuddin social media toolsSalahuddin social media tools
Salahuddin social media tools
 
L1 Introduction to Information and Communication Technology.pptx
L1 Introduction to Information and Communication Technology.pptxL1 Introduction to Information and Communication Technology.pptx
L1 Introduction to Information and Communication Technology.pptx
 
Anahita Social Engine - Vancouver Demo Camp Edition
Anahita Social Engine - Vancouver Demo Camp EditionAnahita Social Engine - Vancouver Demo Camp Edition
Anahita Social Engine - Vancouver Demo Camp Edition
 
online blogging system
online blogging systemonline blogging system
online blogging system
 
CHAPTER 1.docx
CHAPTER 1.docxCHAPTER 1.docx
CHAPTER 1.docx
 
On Social E Learning
On Social E LearningOn Social E Learning
On Social E Learning
 
EMPTECH-LESSONnkkkkkhkhkkhbnnknmn-1.pptx
EMPTECH-LESSONnkkkkkhkhkkhbnnknmn-1.pptxEMPTECH-LESSONnkkkkkhkhkkhbnnknmn-1.pptx
EMPTECH-LESSONnkkkkkhkhkkhbnnknmn-1.pptx
 
Social Media and Social Book Marking
Social Media and Social Book Marking Social Media and Social Book Marking
Social Media and Social Book Marking
 
Presentation
PresentationPresentation
Presentation
 

Recently uploaded

Basics of Relay for Engineering Students
Basics of Relay for Engineering StudentsBasics of Relay for Engineering Students
Basics of Relay for Engineering Studentskannan348865
 
Diploma Engineering Drawing Qp-2024 Ece .pdf
Diploma Engineering Drawing Qp-2024 Ece .pdfDiploma Engineering Drawing Qp-2024 Ece .pdf
Diploma Engineering Drawing Qp-2024 Ece .pdfJNTUA
 
Seismic Hazard Assessment Software in Python by Prof. Dr. Costas Sachpazis
Seismic Hazard Assessment Software in Python by Prof. Dr. Costas SachpazisSeismic Hazard Assessment Software in Python by Prof. Dr. Costas Sachpazis
Seismic Hazard Assessment Software in Python by Prof. Dr. Costas SachpazisDr.Costas Sachpazis
 
21scheme vtu syllabus of visveraya technological university
21scheme vtu syllabus of visveraya technological university21scheme vtu syllabus of visveraya technological university
21scheme vtu syllabus of visveraya technological universityMohd Saifudeen
 
Module-III Varried Flow.pptx GVF Definition, Water Surface Profile Dynamic Eq...
Module-III Varried Flow.pptx GVF Definition, Water Surface Profile Dynamic Eq...Module-III Varried Flow.pptx GVF Definition, Water Surface Profile Dynamic Eq...
Module-III Varried Flow.pptx GVF Definition, Water Surface Profile Dynamic Eq...Nitin Sonavane
 
"United Nations Park" Site Visit Report.
"United Nations Park" Site  Visit Report."United Nations Park" Site  Visit Report.
"United Nations Park" Site Visit Report.MdManikurRahman
 
Raashid final report on Embedded Systems
Raashid final report on Embedded SystemsRaashid final report on Embedded Systems
Raashid final report on Embedded SystemsRaashidFaiyazSheikh
 
The Entity-Relationship Model(ER Diagram).pptx
The Entity-Relationship Model(ER Diagram).pptxThe Entity-Relationship Model(ER Diagram).pptx
The Entity-Relationship Model(ER Diagram).pptxMANASINANDKISHORDEOR
 
Introduction to Artificial Intelligence and History of AI
Introduction to Artificial Intelligence and History of AIIntroduction to Artificial Intelligence and History of AI
Introduction to Artificial Intelligence and History of AISheetal Jain
 
Autodesk Construction Cloud (Autodesk Build).pptx
Autodesk Construction Cloud (Autodesk Build).pptxAutodesk Construction Cloud (Autodesk Build).pptx
Autodesk Construction Cloud (Autodesk Build).pptxMustafa Ahmed
 
NO1 Best Powerful Vashikaran Specialist Baba Vashikaran Specialist For Love V...
NO1 Best Powerful Vashikaran Specialist Baba Vashikaran Specialist For Love V...NO1 Best Powerful Vashikaran Specialist Baba Vashikaran Specialist For Love V...
NO1 Best Powerful Vashikaran Specialist Baba Vashikaran Specialist For Love V...Amil baba
 
5G and 6G refer to generations of mobile network technology, each representin...
5G and 6G refer to generations of mobile network technology, each representin...5G and 6G refer to generations of mobile network technology, each representin...
5G and 6G refer to generations of mobile network technology, each representin...archanaece3
 
Final DBMS Manual (2).pdf final lab manual
Final DBMS Manual (2).pdf final lab manualFinal DBMS Manual (2).pdf final lab manual
Final DBMS Manual (2).pdf final lab manualBalamuruganV28
 
Involute of a circle,Square, pentagon,HexagonInvolute_Engineering Drawing.pdf
Involute of a circle,Square, pentagon,HexagonInvolute_Engineering Drawing.pdfInvolute of a circle,Square, pentagon,HexagonInvolute_Engineering Drawing.pdf
Involute of a circle,Square, pentagon,HexagonInvolute_Engineering Drawing.pdfJNTUA
 
SLIDESHARE PPT-DECISION MAKING METHODS.pptx
SLIDESHARE PPT-DECISION MAKING METHODS.pptxSLIDESHARE PPT-DECISION MAKING METHODS.pptx
SLIDESHARE PPT-DECISION MAKING METHODS.pptxCHAIRMAN M
 
Software Engineering Practical File Front Pages.pdf
Software Engineering Practical File Front Pages.pdfSoftware Engineering Practical File Front Pages.pdf
Software Engineering Practical File Front Pages.pdfssuser5c9d4b1
 
Online crime reporting system project.pdf
Online crime reporting system project.pdfOnline crime reporting system project.pdf
Online crime reporting system project.pdfKamal Acharya
 
Dynamo Scripts for Task IDs and Space Naming.pptx
Dynamo Scripts for Task IDs and Space Naming.pptxDynamo Scripts for Task IDs and Space Naming.pptx
Dynamo Scripts for Task IDs and Space Naming.pptxMustafa Ahmed
 
Piping and instrumentation diagram p.pdf
Piping and instrumentation diagram p.pdfPiping and instrumentation diagram p.pdf
Piping and instrumentation diagram p.pdfAshrafRagab14
 
Augmented Reality (AR) with Augin Software.pptx
Augmented Reality (AR) with Augin Software.pptxAugmented Reality (AR) with Augin Software.pptx
Augmented Reality (AR) with Augin Software.pptxMustafa Ahmed
 

Recently uploaded (20)

Basics of Relay for Engineering Students
Basics of Relay for Engineering StudentsBasics of Relay for Engineering Students
Basics of Relay for Engineering Students
 
Diploma Engineering Drawing Qp-2024 Ece .pdf
Diploma Engineering Drawing Qp-2024 Ece .pdfDiploma Engineering Drawing Qp-2024 Ece .pdf
Diploma Engineering Drawing Qp-2024 Ece .pdf
 
Seismic Hazard Assessment Software in Python by Prof. Dr. Costas Sachpazis
Seismic Hazard Assessment Software in Python by Prof. Dr. Costas SachpazisSeismic Hazard Assessment Software in Python by Prof. Dr. Costas Sachpazis
Seismic Hazard Assessment Software in Python by Prof. Dr. Costas Sachpazis
 
21scheme vtu syllabus of visveraya technological university
21scheme vtu syllabus of visveraya technological university21scheme vtu syllabus of visveraya technological university
21scheme vtu syllabus of visveraya technological university
 
Module-III Varried Flow.pptx GVF Definition, Water Surface Profile Dynamic Eq...
Module-III Varried Flow.pptx GVF Definition, Water Surface Profile Dynamic Eq...Module-III Varried Flow.pptx GVF Definition, Water Surface Profile Dynamic Eq...
Module-III Varried Flow.pptx GVF Definition, Water Surface Profile Dynamic Eq...
 
"United Nations Park" Site Visit Report.
"United Nations Park" Site  Visit Report."United Nations Park" Site  Visit Report.
"United Nations Park" Site Visit Report.
 
Raashid final report on Embedded Systems
Raashid final report on Embedded SystemsRaashid final report on Embedded Systems
Raashid final report on Embedded Systems
 
The Entity-Relationship Model(ER Diagram).pptx
The Entity-Relationship Model(ER Diagram).pptxThe Entity-Relationship Model(ER Diagram).pptx
The Entity-Relationship Model(ER Diagram).pptx
 
Introduction to Artificial Intelligence and History of AI
Introduction to Artificial Intelligence and History of AIIntroduction to Artificial Intelligence and History of AI
Introduction to Artificial Intelligence and History of AI
 
Autodesk Construction Cloud (Autodesk Build).pptx
Autodesk Construction Cloud (Autodesk Build).pptxAutodesk Construction Cloud (Autodesk Build).pptx
Autodesk Construction Cloud (Autodesk Build).pptx
 
NO1 Best Powerful Vashikaran Specialist Baba Vashikaran Specialist For Love V...
NO1 Best Powerful Vashikaran Specialist Baba Vashikaran Specialist For Love V...NO1 Best Powerful Vashikaran Specialist Baba Vashikaran Specialist For Love V...
NO1 Best Powerful Vashikaran Specialist Baba Vashikaran Specialist For Love V...
 
5G and 6G refer to generations of mobile network technology, each representin...
5G and 6G refer to generations of mobile network technology, each representin...5G and 6G refer to generations of mobile network technology, each representin...
5G and 6G refer to generations of mobile network technology, each representin...
 
Final DBMS Manual (2).pdf final lab manual
Final DBMS Manual (2).pdf final lab manualFinal DBMS Manual (2).pdf final lab manual
Final DBMS Manual (2).pdf final lab manual
 
Involute of a circle,Square, pentagon,HexagonInvolute_Engineering Drawing.pdf
Involute of a circle,Square, pentagon,HexagonInvolute_Engineering Drawing.pdfInvolute of a circle,Square, pentagon,HexagonInvolute_Engineering Drawing.pdf
Involute of a circle,Square, pentagon,HexagonInvolute_Engineering Drawing.pdf
 
SLIDESHARE PPT-DECISION MAKING METHODS.pptx
SLIDESHARE PPT-DECISION MAKING METHODS.pptxSLIDESHARE PPT-DECISION MAKING METHODS.pptx
SLIDESHARE PPT-DECISION MAKING METHODS.pptx
 
Software Engineering Practical File Front Pages.pdf
Software Engineering Practical File Front Pages.pdfSoftware Engineering Practical File Front Pages.pdf
Software Engineering Practical File Front Pages.pdf
 
Online crime reporting system project.pdf
Online crime reporting system project.pdfOnline crime reporting system project.pdf
Online crime reporting system project.pdf
 
Dynamo Scripts for Task IDs and Space Naming.pptx
Dynamo Scripts for Task IDs and Space Naming.pptxDynamo Scripts for Task IDs and Space Naming.pptx
Dynamo Scripts for Task IDs and Space Naming.pptx
 
Piping and instrumentation diagram p.pdf
Piping and instrumentation diagram p.pdfPiping and instrumentation diagram p.pdf
Piping and instrumentation diagram p.pdf
 
Augmented Reality (AR) with Augin Software.pptx
Augmented Reality (AR) with Augin Software.pptxAugmented Reality (AR) with Augin Software.pptx
Augmented Reality (AR) with Augin Software.pptx
 

WT 2.pdf

  • 1. SOCIAL NETWORKING SITE 22102D020145 1 OF 101 Project – 2: Design a social website with the following features. Build Profile - Members allow to build their profiles. Upload content - The Social Networking Sites allow members to upload text messages, photographs, audio and video files. All posts are arranged in descending order with the last post coming first. Build conversations - Content posted by members can be browsed and commented upon by all members who form part of the community. Content can also be tagged from third party sites on subjects that interest the group. INTRODUCTION: Designing a Dynamic Social Website In the digital age, social networking sites have become an integral part of our lives, connecting people across the globe and facilitating the exchange of ideas, interests, and experiences. In this project, we aim to design a cutting-edge social website that brings people together, empowers them to build meaningful connections, and fosters engaging conversations within a vibrant community. Our social website will provide a user-friendly platform where members can create and personalize their profiles, showcasing their interests, achievements, and personality. By allowing members to build their profiles, we aim to create a space that reflects their individuality and enables them to connect with like-minded individuals. One of the key features of our social website is the ability for members to upload various forms of content, including text messages, photographs, audio files, and videos. By providing a diverse range of content formats, we seek to cater to different preferences and enable members to express themselves creatively. All uploaded content will be organized in a chronological order, with the most recent posts appearing at the top, allowing users to stay updated and engaged with the latest contributions from the community. Building conversations lies at the heart of our social website. Members will have the opportunity to browse through the content posted by others and participate in dynamic discussions by leaving comments and feedback. This interactive approach encourages active engagement and facilitates the exchange of diverse perspectives within the community. Furthermore, we also facilitate the tagging of content from third-party sites, allowing members to explore and share topics of interest beyond the platform, enhancing the richness of discussions and broadening the horizons of the community. Our team of experienced designers and developers are dedicated to creating an intuitive and visually appealing interface, ensuring seamless navigation and an enjoyable user experience. We prioritize user privacy and data security, implementing robust measures to protect personal information and guarantee a safe and trusted online environment.
  • 2. SOCIAL NETWORKING SITE 22102D020145 2 OF 101 Through this project, we strive to cultivate a vibrant online community where members can connect, express themselves, and build meaningful relationships. By combining the features of profile building, content uploading, and interactive conversations, our social website aims to provide a platform that fosters creativity, collaboration, and a sense of belonging. Join us on this exciting journey as we shape the future of social networking together. Features:  Build Profile– Members will be able to create their own profiles, which will include their name, age, location, interests, and other personal information.  Upload Content– Members will be able to upload text messages, photographs, audio and video files. All posts will be arranged in descending order with the last post coming first.  Build Conversations–Content posted by members can be browsed and commented upon by all members who form part of the community. Content can also be tagged from third party sites on subjects that interest the group. This project will focus on the design of a social website that allows users to build their profiles, upload content, and build conversations with other users. The website will be designed to be user- friendly and easy to navigate. It will also be designed to be secure and private, so that users can feel comfortable sharing their personal information and content. The following are some of the specific features that will be included in the social website:  Profile Builder– Users will be able to create their own profiles, which will include their name, age, location, interests, and other personal information.  Content Uploader– Users will be able to upload text messages, photographs, audio and video files. All posts will be arranged in descending order with the last post coming first.  Conversation Builder–Content posted by members can be browsed and commented upon by all members who form part of the community. Content can also be tagged from third party sites on subjects that interest the group. The social website will be designed to be user-friendly and easy to navigate. It will also be designed to be secure and private, so that users can feel comfortable sharing their personal information and content. The following are some of the design considerations that will be taken into account:  User-friendliness– The website will be designed to be easy to use and navigate. Users should be able to find the information and features they need quickly and easily.  Security– The website will be designed to be secure and private. Users should feel comfortable sharing their personal information and content on the website.  Privacy– The website will be designed to protect user privacy. Users should be able to control who can see their personal information and content.
  • 3. SOCIAL NETWORKING SITE 22102D020145 3 OF 101 The social website will be a valuable resource for users who want to connect with other people who share their interests. It will also be a great way for users to share their thoughts, ideas, and experiences with the world. SYSTEM ARCHITECTURE: The system architecture of a social networking site is complex and involves many different components. The following is a high-level overview of the system architecture:  User interface: The user interface is the part of the system that users interact with. It allows users to create profiles, upload content, and build conversations. The user interface is typically implemented using a web browser.  Content management system: The content management system (CMS) is responsible for storing and managing the content of the social networking site. The CMS allows users to create, edit, and delete content. It also allows users to control who can access and view their content.  Application server: The application server is responsible for running the code that powers the social networking site. The application server provides a platform for the CMS and other components to run on.  Database: The database stores all of the data for the social networking site. This includes user profiles, content, and other information.  Web server: The web server is responsible for delivering the content of the social networking site to users. The web server receives requests from users' web browsers and delivers the requested content.  Network: The network is responsible for connecting the different components of the social networking site. The network allows users to access the social networking site from anywhere in the world. The system architecture of a social networking site is complex and involves many different components. The specific components that are used will depend on the size and complexity of the social networking site. Here are some additional considerations for the system architecture of a social networking site:  Security: The social networking site must be secure to protect the privacy of its users. This means that the system must be designed to prevent unauthorized access to user data.  Scalability: The social networking site must be scalable to handle a large number of users. This means that the system must be designed to be able to add more resources as needed.  Performance: The social networking site must be performant to provide a good user experience. This means that the system must be designed to be able to handle a large number of requests without slowing down.
  • 4. SOCIAL NETWORKING SITE 22102D020145 4 OF 101 The system architecture of a social networking site is a critical part of the development process. By carefully considering the different components and considerations, you can create a social networking site that is secure, scalable, and performant. The system architecture of the social website consists of several key components that work together to provide a seamless user experience. These components include: 1. User Interface (UI): The user interface component is responsible for presenting the website's visual elements to users and facilitating their interactions. It encompasses the design of the website, including layout, color scheme, and navigation menus, ensuring an intuitive and visually appealing experience for members. 2. User Profiles: The user profile component allows members to create and customize their profiles. It includes features such as profile pictures, personal information, interests, and achievements. The profiles serve as a representation of each member's identity within the community. 3. Content Management: The content management component handles the storage, retrieval, and organization of various types of content uploaded by members. This includes text messages, photographs, audio files, and videos. All posts are arranged in descending order, with the latest content displayed first for easy access. 4. Community Interaction: The community interaction component enables members to engage with each other's content. It includes features like commenting, liking, and sharing, which foster conversations and encourage collaboration. Members can leave comments on posts, providing feedback, initiating discussions, and forming connections with other community members. 5. Third-Party Integration: The third-party integration component allows members to tag and share content from external sources that align with the interests of the community. This feature enhances the diversity of topics and resources available for discussion, enabling members to explore a wide range of subjects beyond the platform. 6. Privacy and Security: The privacy and security component ensures the protection of user data and maintains a safe online environment. It includes measures such as user authentication, secure data transmission, and data encryption to safeguard personal information and prevent unauthorized access. 7. Backend and Database: The backend and database component consists of server-side technologies and databases that power the website's functionality. It handles requests from the user interface, processes data, and stores it securely. This component also manages user authentication, content storage, and retrieval. 8. Scalability and Performance: The scalability and performance component focuses on ensuring the website can handle a growing number of users and content without
  • 5. SOCIAL NETWORKING SITE 22102D020145 5 OF 101 compromising performance. It involves optimizing code, utilizing caching mechanisms, and employing scalable infrastructure to maintain a responsive and efficient user experience. Overall, the system architecture of the social website is designed to provide a user-friendly interface, robust content management, interactive community engagement, and a secure environment. By integrating these components effectively, the website can deliver an engaging and seamless social networking experience for its members. UML DIAGRAM:
  • 9. SOCIAL NETWORKING SITE 22102D020145 9 OF 101 CODE: Back-end .idea # Default ignored files /shelf/ /workspace.xml # Datasource local storage ignored files /../../../../../../../../:UsersnikolDesktopGitHubLinkedIn-Cloneback-end.idea/dataSources/ /dataSources.local.xml # Editor-based HTTP Client requests /httpRequests/ Back-end.iml <?xml version="1.0" encoding="UTF-8"?> <module type="JAVA_MODULE" version="4"> <component name="NewModuleRootManager" inherit-compiler-output="true"> <exclude-output /> <content url="file://$MODULE_DIR$" /> <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> </component> </module> Compiler <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="CompilerConfiguration"> <annotationProcessing> <profile default="true" name="Default" enabled="true" /> <profile name="Maven default annotation processors profile" enabled="true"> <sourceOutputDir name="target/generated-sources/annotations" /> <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> <outputRelativeToContentRoot value="true" /> <module name="linkedin-clone" /> </profile> </annotationProcessing> <bytecodeTargetLevel> <module name="linkedin-clone" target="1.8" />
  • 10. SOCIAL NETWORKING SITE 22102D020145 10 OF 101 </bytecodeTargetLevel> </component> <component name="JavacSettings"> <option name="ADDITIONAL_OPTIONS_OVERRIDE"> <module name="linkedin-clone" options="-parameters" /> </option> </component> </project> wrapper WrapperDownloader /* * Copyright 2007-present the original author or authors. * * 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 * * https://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. */ import java.net.*; import java.io.*; import java.nio.channels.*; import java.util.Properties; public class MavenWrapperDownloader { private static final String WRAPPER_VERSION = "0.5.6"; /** * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. */ private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; /** * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to * use instead of the default one. */
  • 11. SOCIAL NETWORKING SITE 22102D020145 11 OF 101 private static final String MAVEN_WRAPPER_PROPERTIES_PATH = ".mvn/wrapper/maven-wrapper.properties"; /** * Path where the maven-wrapper.jar will be saved to. */ private static final String MAVEN_WRAPPER_JAR_PATH = ".mvn/wrapper/maven-wrapper.jar"; /** * Name of the property which should be used to override the default download url for the wrapper. */ private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; public static void main(String args[]) { System.out.println("- Downloader started"); File baseDirectory = new File(args[0]); System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); // If the maven-wrapper.properties exists, read it and check if it contains a custom // wrapperUrl parameter. File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); String url = DEFAULT_DOWNLOAD_URL; if(mavenWrapperPropertyFile.exists()) { FileInputStream mavenWrapperPropertyFileInputStream = null; try { mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); Properties mavenWrapperProperties = new Properties(); mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); } catch (IOException e) { System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); } finally { try { if(mavenWrapperPropertyFileInputStream != null) { mavenWrapperPropertyFileInputStream.close(); } } catch (IOException e) { // Ignore ... } } } System.out.println("- Downloading from: " + url);
  • 12. SOCIAL NETWORKING SITE 22102D020145 12 OF 101 File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); if(!outputFile.getParentFile().exists()) { if(!outputFile.getParentFile().mkdirs()) { System.out.println( "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); } } System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); try { downloadFileFromURL(url, outputFile); System.out.println("Done"); System.exit(0); } catch (Throwable e) { System.out.println("- Error downloading"); e.printStackTrace(); System.exit(1); } } private static void downloadFileFromURL(String urlString, File destination) throws Exception { if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { String username = System.getenv("MVNW_USERNAME"); char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); Authenticator.setDefault(new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); } URL website = new URL(urlString); ReadableByteChannel rbc; rbc = Channels.newChannel(website.openStream()); FileOutputStream fos = new FileOutputStream(destination); fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); fos.close(); rbc.close(); } }
  • 13. SOCIAL NETWORKING SITE 22102D020145 13 OF 101 Advices EmailExistsAlreadyAdvice package com.linkedin.linkedinclone.advices; import com.linkedin.linkedinclone.exceptions.EmailExistsAlreadyException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @ControllerAdvice public class EmailExistsAlreadyAdvice { @ResponseBody @ExceptionHandler(EmailExistsAlreadyException.class) @ResponseStatus(HttpStatus.IM_USED) String emailFoundHandler(EmailExistsAlreadyException ex) { return ex.getMessage(); } } EmailNotFoundAdvice package com.linkedin.linkedinclone.advices; import com.linkedin.linkedinclone.exceptions.EmailNotFoundException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @ControllerAdvice public class EmailNotFoundAdvice { @ResponseBody @ExceptionHandler(EmailNotFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND) String userNotFoundHandler(EmailNotFoundException ex) { return ex.getMessage(); }
  • 14. SOCIAL NETWORKING SITE 22102D020145 14 OF 101 } ObjectExistsAdvice package com.linkedin.linkedinclone.advices; import com.linkedin.linkedinclone.exceptions.EmailNotFoundException; import com.linkedin.linkedinclone.exceptions.ObjectExistsException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @ControllerAdvice public class ObjectExistsAdvice { @ResponseBody @ExceptionHandler(ObjectExistsException.class) @ResponseStatus(HttpStatus.FOUND) String existsHandler(ObjectExistsException ex) { return ex.getMessage(); } } PasswordNotSameAdvice package com.linkedin.linkedinclone.advices; import com.linkedin.linkedinclone.exceptions.EmailNotFoundException; import com.linkedin.linkedinclone.exceptions.PasswordsNotSameException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @ControllerAdvice public class PasswordsNotSameAdvice { @ResponseBody @ExceptionHandler(PasswordsNotSameException.class) @ResponseStatus(HttpStatus.NOT_ACCEPTABLE) String differentPasswordsHandler(PasswordsNotSameException ex) { return ex.getMessage(); } }
  • 15. SOCIAL NETWORKING SITE 22102D020145 15 OF 101 PostNotFoundAdvice package com.linkedin.linkedinclone.advices; import com.linkedin.linkedinclone.exceptions.PostNotFoundException; import com.linkedin.linkedinclone.exceptions.UserNotFoundException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @ControllerAdvice public class PostNotFoundAdvice { @ResponseBody @ExceptionHandler(PostNotFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND) String userNotFoundHandler(PostNotFoundException ex) { return ex.getMessage(); } } UserNotFoundAdvice package com.linkedin.linkedinclone.advices; import com.linkedin.linkedinclone.exceptions.PostNotFoundException; import com.linkedin.linkedinclone.exceptions.UserNotFoundException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @ControllerAdvice public class PostNotFoundAdvice { @ResponseBody @ExceptionHandler(PostNotFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND) String userNotFoundHandler(PostNotFoundException ex) { return ex.getMessage(); } }
  • 16. SOCIAL NETWORKING SITE 22102D020145 16 OF 101 UserNotFounAdvice package com.linkedin.linkedinclone.advices; import com.linkedin.linkedinclone.exceptions.UserNotFoundException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @ControllerAdvice public class UserNotFoundAdvice { @ResponseBody @ExceptionHandler(UserNotFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND) String userNotFoundHandler(UserNotFoundException ex) { return ex.getMessage(); } } WrongPasswordAdvice package com.linkedin.linkedinclone.advices; import com.linkedin.linkedinclone.exceptions.UserNotFoundException; import com.linkedin.linkedinclone.exceptions.WrongPasswordException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @ControllerAdvice public class WrongPasswordAdvice { @ResponseBody @ExceptionHandler(WrongPasswordException.class) @ResponseStatus(HttpStatus.FORBIDDEN) String wrongPasswordHandler(WrongPasswordException ex) { return ex.getMessage(); } } Controllers
  • 17. SOCIAL NETWORKING SITE 22102D020145 17 OF 101 AdminController package com.linkedin.linkedinclone.controllers; import com.linkedin.linkedinclone.model.Picture; import com.linkedin.linkedinclone.model.User; import com.linkedin.linkedinclone.repositories.RoleRepository; import com.linkedin.linkedinclone.repositories.UserRepository; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.Set; import static com.linkedin.linkedinclone.utils.PictureSave.decompressBytes; @RestController @AllArgsConstructor public class AdminController { private final UserRepository userRepository; private final RoleRepository roleRepository; @Autowired private final BCryptPasswordEncoder encoder; @CrossOrigin(origins = "*") // CrossOrigin: For connecting with angular @GetMapping("/admin/users") public List<User> all() { List<User> users = userRepository.findAll(); for(User u: users){ System.out.println(u.getName()); Picture uPic = u.getProfilePicture(); if(uPic!=null && uPic.isCompressed()) { Picture temp = new Picture(uPic.getName(), uPic.getType(), decompressBytes(uPic.getBytes())); temp.setCompressed(false); u.setProfilePicture(temp); } } return users; }
  • 18. SOCIAL NETWORKING SITE 22102D020145 18 OF 101 } ChatController package com.linkedin.linkedinclone.controllers; import com.linkedin.linkedinclone.exceptions.UserNotFoundException; import com.linkedin.linkedinclone.model.*; import com.linkedin.linkedinclone.repositories.ChatRepository; import com.linkedin.linkedinclone.repositories.MessageRepository; import com.linkedin.linkedinclone.repositories.RoleRepository; import com.linkedin.linkedinclone.repositories.UserRepository; import com.linkedin.linkedinclone.services.UserService; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.HashSet; import java.util.Set; import static com.linkedin.linkedinclone.utils.PictureSave.decompressBytes; @RestController @AllArgsConstructor public class ChatController { @Autowired UserService userService; private final UserRepository userRepository; private final RoleRepository roleRepository; private final ChatRepository chatRepository; private final MessageRepository messageRepository; @CrossOrigin(origins = "*") @GetMapping("/in/{id}/chats") public Set<Chat> getAllChats(@PathVariable Long id) { System.out.println("nnn"); User currentUser = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User with "+id+" not found")); for(Chat c: currentUser.getChats()) System.out.println(c); for(Chat c: currentUser.getChats()) {
  • 19. SOCIAL NETWORKING SITE 22102D020145 19 OF 101 System.out.println(c); for(User u: c.getUsers()){ Picture pic = u.getProfilePicture(); if(pic != null){ if(pic.isCompressed()){ Picture tempPicture = new Picture(pic.getId(),pic.getName(),pic.getType(),decompressBytes(pic.getBytes())); pic.setCompressed(false); u.setProfilePicture(tempPicture); } } } for(Message m: c.getMessages()){ User u = m.getUserMadeBy(); Picture pic = u.getProfilePicture(); if(pic != null){ if(pic.isCompressed()){ Picture tempPicture = new Picture(pic.getId(),pic.getName(),pic.getType(),decompressBytes(pic.getBytes())); pic.setCompressed(false); u.setProfilePicture(tempPicture); } } } } return currentUser.getChats(); } @CrossOrigin(origins = "*") @GetMapping("/in/{id}/chat/{chatId}") public Chat getChat(@PathVariable Long id, @PathVariable Long chatId) { User currentUser = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User with "+id+" not found")); Chat chat = chatRepository.findById(chatId).orElseThrow(()->new UserNotFoundException("Chat with "+id+" not found")); return chat; } @CrossOrigin(origins = "*") @PostMapping("/in/{id}/chat/{chatId}/new-message") public ResponseEntity<?> newMessage(@PathVariable Long id, @PathVariable Long chatId, @RequestBody Message message) { User currentUser = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User with "+id+" not found")); Chat chat = chatRepository.findById(chatId).orElseThrow(()->new UserNotFoundException("Chat with "+id+" not found"));
  • 20. SOCIAL NETWORKING SITE 22102D020145 20 OF 101 message.setUserMadeBy(currentUser); message.setChat(chat); messageRepository.save(message); return ResponseEntity.ok(message); } } FeedController package com.linkedin.linkedinclone.controllers; import com.intellij.util.indexing.ID; import com.linkedin.linkedinclone.dto.FeedDTO; import com.linkedin.linkedinclone.exceptions.PostNotFoundException; import com.linkedin.linkedinclone.exceptions.UserNotFoundException; import com.linkedin.linkedinclone.model.*; import com.linkedin.linkedinclone.recommendation.RecommendationAlgos; import com.linkedin.linkedinclone.repositories.*; import com.linkedin.linkedinclone.services.UserService; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.*; import static com.linkedin.linkedinclone.enumerations.NotificationType.INTEREST; import static com.linkedin.linkedinclone.utils.PictureSave.compressBytes; import static com.linkedin.linkedinclone.utils.PictureSave.decompressBytes; @RestController @AllArgsConstructor public class FeedController { @Autowired UserService userService;
  • 21. SOCIAL NETWORKING SITE 22102D020145 21 OF 101 private final UserRepository userRepository; private final PostRepository postRepository; private final PictureRepository pictureRepository; private final CommentRepository commentRepository; private final NotificationRepository notificationRepository; private final InterestReactionRepository interestReactionRepository; @CrossOrigin(origins = "*") @GetMapping("/in/{id}/feed-posts") public Set<Post> getFeedPosts(@PathVariable Long id) { System.out.println("nnn ------------------- Get feed posts"); User user = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User with "+id+" not found")); Set<Post> feedPosts = new HashSet<>(); feedPosts.addAll(user.getPosts()); Set<Connection> connections = user.getUsersFollowing(); for(Connection con: connections) { if(con.getIsAccepted()){ User userFollowing = con.getUserFollowed(); feedPosts.addAll(userFollowing.getPosts()); Set<InterestReaction> interestReactions = userFollowing.getInterestReactions(); for(InterestReaction ir: interestReactions){ feedPosts.add(ir.getPost()); } } } connections = user.getUserFollowedBy(); for(Connection con: connections) { if(con.getIsAccepted()){ User userFollowing = con.getUserFollowing(); feedPosts.addAll(userFollowing.getPosts()); Set<InterestReaction> interestReactions = userFollowing.getInterestReactions(); for(InterestReaction ir: interestReactions){ feedPosts.add(ir.getPost()); } } } for(Post p: feedPosts) { User owner = p.getOwner();
  • 22. SOCIAL NETWORKING SITE 22102D020145 22 OF 101 Picture pic = owner.getProfilePicture(); if(pic != null){ if(pic.isCompressed()){ Picture dbPic = pictureRepository.findById(pic.getId()).orElseThrow(()->new UserNotFoundException("Pic with "+pic.getId()+" not found"));; Picture tempPicture = new Picture(dbPic.getId(),dbPic.getName(),dbPic.getType(),decompressBytes(dbPic.getBytes())); tempPicture.setCompressed(false); owner.setProfilePicture(tempPicture); } } Set<Comment> comments = p.getComments(); for(Comment c: comments){ User commentOwner = c.getUserMadeBy(); Picture cpic = commentOwner.getProfilePicture(); if(cpic != null){ if(cpic.isCompressed()){ Picture tempPicture = new Picture(cpic.getId(),cpic.getName(),cpic.getType(),decompressBytes(cpic.getBytes())); tempPicture.setCompressed(false); commentOwner.setProfilePicture(tempPicture); } } } Set<Picture> newPicts = new HashSet<>(); for(Picture pict : p.getPictures()){ if(pict != null){ if(pict.isCompressed()){ Picture tempPicture = new Picture(pict.getId(),pict.getName(),pict.getType(),decompressBytes(pict.getBytes())); tempPicture.setCompressed(false); newPicts.add(tempPicture); System.out.println("> Picture compressed and saved saved "); }else newPicts.add(pict); } } p.setPictures(newPicts); /* System.out.println(owner); System.out.println(p);*/ } return feedPosts; }
  • 23. SOCIAL NETWORKING SITE 22102D020145 23 OF 101 @CrossOrigin(origins = "*") @PostMapping(value="/in/{id}/feed/new-post", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) public ResponseEntity newPost(@PathVariable Long id,@RequestPart("object") Post post,@RequestPart(value = "imageFile", required=false) MultipartFile[] files) throws IOException { System.out.println("nnn> newPost: "+id); User currentUser = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User with "+id+" not found")); System.out.println("n> findByIdn"); post.setOwner(currentUser); System.out.println("n> setOwnern"); if(files!=null){ for(MultipartFile file: files){ Picture pic = new Picture(file.getOriginalFilename() ,file.getContentType() ,compressBytes(file.getBytes())); pic.setCompressed(true); pic.setPost(post); pictureRepository.save(pic); System.out.println("> Picture compressed and saved saved "); } } System.out.println("n> to saven"); postRepository.save(post); System.out.println("nnn> New post made with success"); System.out.println(post); System.out.println(post.getOwner()); return ResponseEntity.ok(""Post created with success!""); } @CrossOrigin(origins = "*") @PutMapping("/in/{id}/feed/post-interested/{postdId}") public ResponseEntity newInterestedPost(@PathVariable Long id,@PathVariable Long postdId) { System.out.println("> /in/{id}/feed/post-interested/{postdId}"); User currentUser = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User with "+id+" not found")); Post post = postRepository.findById(postdId).orElseThrow(()->new PostNotFoundException("Post with "+id+" not found")); // IF reaction exists delete it for(InterestReaction ir: post.getInterestReactions()) { if(ir.getUserMadeBy()==currentUser) { currentUser.getInterestReactions().remove(ir); currentUser.setInterestReactions(currentUser.getInterestReactions());
  • 24. SOCIAL NETWORKING SITE 22102D020145 24 OF 101 post.getInterestReactions().remove(ir); post.setInterestReactions(post.getInterestReactions()); ir.setUserMadeBy(null); ir.setPost(null); userRepository.save(currentUser); postRepository.save(post); interestReactionRepository.delete(ir); System.out.println("> Reaction deleted"); System.out.println(post); return ResponseEntity.ok(""Reaction deleted with success!""); } } InterestReaction newReaction = new InterestReaction(currentUser,post); User postOwner = post.getOwner(); if(postOwner!=currentUser){ Notification notification = new Notification(INTEREST,postOwner,newReaction); notificationRepository.save(notification); } interestReactionRepository.save(newReaction); System.out.println("> New reaction made with success"); System.out.println(post); return ResponseEntity.ok(""Interested in post created with success!""); } @CrossOrigin(origins = "*") @GetMapping("/in/{id}/feed/is-interested/{postdId}") public ResponseEntity<?> isInterestedPost(@PathVariable Long id, @PathVariable Long postdId) { System.out.println("n> ----- Reaction searchn"); InterestReaction isInterested = null; Post post = postRepository.findById(postdId).orElseThrow(()->new PostNotFoundException("Post with "+id+" not found")); User currentUser = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User with "+id+" not found")); for(InterestReaction ir: post.getInterestReactions()) { if(ir.getUserMadeBy()==currentUser) { System.out.println("> Reaction found"); return ResponseEntity.ok(ir); } } System.out.println("> "+isInterested); System.out.println(post); return ResponseEntity.ok(null); }
  • 25. SOCIAL NETWORKING SITE 22102D020145 25 OF 101 @CrossOrigin(origins = "*") @PutMapping("/in/{id}/feed/new-comment/{postdId}") public ResponseEntity newComment(@PathVariable Long id,@PathVariable Long postdId,@RequestBody Comment comment) { User currentUser = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User with "+id+" not found")); Post post = postRepository.findById(postdId).orElseThrow(()->new PostNotFoundException("Post with "+id+" not found")); userService.newPostComment(currentUser,post,comment); System.out.println("> New comment made with success"); System.out.println(comment); System.out.println(post); return ResponseEntity.ok(""Comment in post created with success!""); } @CrossOrigin(origins = "*") @GetMapping("/in/{id}/recommended-posts") public List<Post> getRecommendedPosts(@PathVariable Long id) { RecommendationAlgos recAlgos = new RecommendationAlgos(); recAlgos.recommendedPosts(userRepository, postRepository, userService); List<Post> recommendedPosts = new ArrayList<>(); User currentUser = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User with " + id + " not found")); System.out.println("nnn 1 ===================================nnn"); if (currentUser.getRecommendedPosts().size() != 0) { for (Post p : currentUser.getRecommendedPosts()) { for(Post fp: getFeedPosts(id)){ Long id1 = fp.getId(); Long id2 = p.getId(); if (id1 == id2) recommendedPosts.add(p); } } }else { return new ArrayList<>(getFeedPosts(id)); } System.out.println("nnn 2 ===================================nnn"); Collections.reverse(recommendedPosts); System.out.println("nnn 3 ===================================nnn"); for(Post p: recommendedPosts) { User owner = p.getOwner(); Picture pic = owner.getProfilePicture(); if(pic != null){
  • 26. SOCIAL NETWORKING SITE 22102D020145 26 OF 101 if(pic.isCompressed()){ Picture dbPic = pictureRepository.findById(pic.getId()).orElseThrow(()->new UserNotFoundException("Pic with "+pic.getId()+" not found"));; Picture tempPicture = new Picture(dbPic.getId(),dbPic.getName(),dbPic.getType(),decompressBytes(dbPic.getBytes())); tempPicture.setCompressed(false); owner.setProfilePicture(tempPicture); } } Set<Comment> comments = p.getComments(); for(Comment c: comments){ User commentOwner = c.getUserMadeBy(); Picture cpic = commentOwner.getProfilePicture(); if(cpic != null){ if(cpic.isCompressed()){ Picture tempPicture = new Picture(cpic.getId(),cpic.getName(),cpic.getType(),decompressBytes(cpic.getBytes())); tempPicture.setCompressed(false); commentOwner.setProfilePicture(tempPicture); } } } Set<Picture> newPicts = new HashSet<>(); for(Picture pict : p.getPictures()){ if(pict != null){ if(pict.isCompressed()){ Picture tempPicture = new Picture(pict.getId(),pict.getName(),pict.getType(),decompressBytes(pict.getBytes())); tempPicture.setCompressed(false); newPicts.add(tempPicture); System.out.println("> Picture compressed and saved saved "); }else newPicts.add(pict); } } p.setPictures(newPicts); /* System.out.println(owner); System.out.println(p);*/ } return recommendedPosts; } } JobsController
  • 27. SOCIAL NETWORKING SITE 22102D020145 27 OF 101 package com.linkedin.linkedinclone.controllers; import com.linkedin.linkedinclone.exceptions.ObjectExistsException; import com.linkedin.linkedinclone.exceptions.PostNotFoundException; import com.linkedin.linkedinclone.exceptions.UserNotFoundException; import com.linkedin.linkedinclone.model.*; import com.linkedin.linkedinclone.recommendation.RecommendationAlgos; import com.linkedin.linkedinclone.repositories.CommentRepository; import com.linkedin.linkedinclone.repositories.JobsRepository; import com.linkedin.linkedinclone.repositories.PostRepository; import com.linkedin.linkedinclone.repositories.UserRepository; import com.linkedin.linkedinclone.services.UserService; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.*; import static com.linkedin.linkedinclone.utils.PictureSave.decompressBytes; import static jdk.nashorn.internal.objects.Global.println; @RestController @AllArgsConstructor public class JobsController { @Autowired UserService userService; private final UserRepository userRepository; private final JobsRepository jobRepository ; private final CommentRepository commentRepository; @CrossOrigin(origins = "*") @PostMapping("/in/{id}/new-job") public ResponseEntity newJob(@PathVariable Long id, @RequestBody Job job) { System.out.println(job); User currentUser = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User with "+id+" not found")); job.setUserMadeBy(currentUser); jobRepository.save(job); return ResponseEntity.ok(""Job created with success!""); } @CrossOrigin(origins = "*") @GetMapping("/in/{id}/jobs") public Set<Job> getJobs(@PathVariable Long id) {
  • 28. SOCIAL NETWORKING SITE 22102D020145 28 OF 101 System.out.println("nngetJobsn"); User currentUser = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User with "+id+" not found")); Set<Job> jobs = new HashSet<>(); /* jobs.addAll(currentUser.getJobsCreated()); Set<User> network = userService.getUserNetwork(currentUser); for(User u: network){ jobs.addAll(u.getJobsCreated()); }*/ Set<Job> allJobs = new HashSet<>(jobRepository.findAll()); jobs.addAll(allJobs); System.out.println("n"); for(Job j: jobs) { System.out.println(j); User owner = j.getUserMadeBy(); Picture pic = owner.getProfilePicture(); if(pic != null){ if(pic.isCompressed()){ Picture tempPicture = new Picture(pic.getId(),pic.getName(),pic.getType(),decompressBytes(pic.getBytes())); pic.setCompressed(false); owner.setProfilePicture(tempPicture); } } Set<User> usersApplied = j.getUsersApplied(); for(User u: usersApplied) { Picture cpic = u.getProfilePicture(); if(cpic != null){ if(cpic.isCompressed()){ Picture tempPicture = new Picture(cpic.getId(),cpic.getName(),cpic.getType(),decompressBytes(cpic.getBytes())); cpic.setCompressed(false); u.setProfilePicture(tempPicture); } } } } return jobs; }
  • 29. SOCIAL NETWORKING SITE 22102D020145 29 OF 101 @CrossOrigin(origins = "*") @PutMapping("/in/{id}/jobs/make-application/{jobId}") public ResponseEntity newApplication(@PathVariable Long id, @PathVariable Long jobId) { System.out.println("nnnewApplicationn"); User currentUser = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User with "+id+" not found")); Job job = jobRepository.findById(jobId).orElseThrow(()->new UserNotFoundException("Job not found")); Set<User> usersApplied = job.getUsersApplied(); if(!usersApplied.contains(currentUser)){ usersApplied.add(currentUser); job.setUsersApplied(usersApplied); jobRepository.save(job); }else return ResponseEntity .badRequest() .body("{"timestamp": " + """ + new Date().toString() + ""," + ""status": 400, " + ""error": "Bad Request", " + ""message": "Application has already been made!", " ); return ResponseEntity.ok(""Interested in post created with success!""); } @CrossOrigin(origins = "*") @GetMapping("/in/{id}/jobs/{jobId}/applicants") public Set<User> getJobApplicants(@PathVariable Long id, @PathVariable Long jobId) { User currentUser = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User with "+id+" not found")); Job job = jobRepository.findById(jobId).orElseThrow(()->new UserNotFoundException("Job not found")); return job.getUsersApplied(); } @CrossOrigin(origins = "*") @GetMapping("/in/{id}/recommended-jobs") public List<Job> getRecommendedJobs(@PathVariable Long id){ RecommendationAlgos recAlgos = new RecommendationAlgos(); recAlgos.recommendedJobs(userRepository, jobRepository, userService); User currentUser = userRepository.findById(id).orElseThrow(()->new UserNotFoundException("User with "+id+" not found")); List<Job> recommendedJobs = new ArrayList<>(); if (currentUser.getRecommendedJobs().size() != 0){ System.out.println("list is null"); recommendedJobs = currentUser.getRecommendedJobs(); } else {
  • 30. SOCIAL NETWORKING SITE 22102D020145 30 OF 101 return new ArrayList<>(getJobs(id)); } for (Job j:recommendedJobs ) { System.out.println(j); } System.out.println(recommendedJobs); Collections.reverse(recommendedJobs); for(Job j: recommendedJobs) { System.out.println(j); User owner = j.getUserMadeBy(); Picture pic = owner.getProfilePicture(); if(pic != null){ if(pic.isCompressed()){ Picture tempPicture = new Picture(pic.getId(),pic.getName(),pic.getType(),decompressBytes(pic.getBytes())); tempPicture.setCompressed(false); owner.setProfilePicture(tempPicture); } } Set<User> usersApplied = j.getUsersApplied(); for(User u: usersApplied) { Picture cpic = u.getProfilePicture(); if(cpic != null){ if(cpic.isCompressed()){ Picture tempPicture = new Picture(cpic.getId(),cpic.getName(),cpic.getType(),decompressBytes(cpic.getBytes())); tempPicture.setCompressed(false); u.setProfilePicture(tempPicture); } } } } return recommendedJobs; } } NetworkController package com.linkedin.linkedinclone.controllers; import com.linkedin.linkedinclone.exceptions.UserNotFoundException;
  • 31. SOCIAL NETWORKING SITE 22102D020145 31 OF 101 import com.linkedin.linkedinclone.model.*; import com.linkedin.linkedinclone.repositories.*; import com.linkedin.linkedinclone.services.UserService; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.*; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.*; import static com.google.common.collect.Lists.reverse; import static com.linkedin.linkedinclone.utils.PictureSave.decompressBytes; import static com.linkedin.linkedinclone.utils.Utils.minDistance; @RestController @AllArgsConstructor public class NetworkController { @Autowired UserService userService; private final UserRepository userRepository; private final RoleRepository roleRepository; private final ConnectionRepository connectionRepository; private final NotificationRepository notificationRepository; private final ChatRepository chatRepository; @CrossOrigin(origins = "*") //@PreAuthorize("hasRole('PROFESSIONAL')") @GetMapping("/in/{id}/search/{searchQuery}") public List<User> search(@PathVariable Long id,@PathVariable String searchQuery) { User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User with id "+id+"doesn't exist")); List<User> searchResults = new ArrayList<User>(); List<User> allUsers = userService.getAllUsers(); String[] searchQueries = searchQuery.split("W+"); MultiValueMap<Integer,User> map = new LinkedMultiValueMap<>(); for(String s: searchQueries) { String w = s.toLowerCase(); System.out.println(">>> Lemma: " + s); for(User u: allUsers){ if((u.getId() != id) && (!u.getName().equals("admin"))){
  • 32. SOCIAL NETWORKING SITE 22102D020145 32 OF 101 int dist; System.out.println(u.getName()); if ( (dist = minDistance(w, u.getName().toLowerCase(Locale.ROOT))) < 10){ System.out.println("- "+u.getName()+" "+dist); map.add(dist, u); } else if ((dist = minDistance(w,u.getSurname().toLowerCase(Locale.ROOT))) < 10) { System.out.println("- "+u.getSurname()+" "+dist); map.add(dist,u); }else if( (u.getCurrentCompany()!=null && u.getCurrentCompany().toLowerCase(Locale.ROOT) == w) || (u.getCurrentJob()!=null && u.getCurrentJob().toLowerCase(Locale.ROOT) == w)) { map.add(1,u); } } } } for(Map.Entry m: map.entrySet()){ System.out.println("-- "+m.getValue()); searchResults.addAll((List<User>) m.getValue()); } for(User u: searchResults){ System.out.println(u.getName()); Picture uPic = u.getProfilePicture(); if(uPic!=null && uPic.isCompressed()) { Picture temp = new Picture(uPic.getName(), uPic.getType(), decompressBytes(uPic.getBytes())); u.setProfilePicture(temp); } } return reverse(searchResults); } @CrossOrigin(origins = "*") //@PreAuthorize("hasRole('PROFESSIONAL')") @GetMapping("/in/{id}/network") public Set<User> getNetwork(@PathVariable Long id) { User currentUser = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User with id "+id+"doesn't exist")); Set<User> network = new HashSet<>(); Set<Connection> connectionsFollowing = currentUser.getUsersFollowing(); System.out.println("connectionsFollowing"); for(Connection con: connectionsFollowing) { if(con.getIsAccepted()){
  • 33. SOCIAL NETWORKING SITE 22102D020145 33 OF 101 User userinNetwork = con.getUserFollowed(); System.out.println(userinNetwork.getName()); network.add(userinNetwork); } } Set<Connection> connectionsFollowedBy = currentUser.getUserFollowedBy(); System.out.println("connectionsFollowedBy"); for(Connection con: connectionsFollowedBy) { if(con.getIsAccepted()){ User userinNetwork = con.getUserFollowing(); System.out.println(userinNetwork.getName()); network.add(userinNetwork); } } for(User u: network){ System.out.println(u.getName()); Picture uPic = u.getProfilePicture(); if(uPic!=null && uPic.isCompressed()) { Picture temp = new Picture(uPic.getName(), uPic.getType(), decompressBytes(uPic.getBytes())); temp.setCompressed(false); u.setProfilePicture(temp); } } return network; } @CrossOrigin(origins = "*") //@PreAuthorize("hasRole('PROFESSIONAL')") @GetMapping("/in/{id}/request/{otherUserId}") public ResponseEntity<String> hasSendRequest(@PathVariable Long id, @PathVariable Long otherUserId) { System.out.println("nn>Check request"); User currentUser = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User with id "+id+"doesn't exist")); User otherUser = userRepository.findById(otherUserId).orElseThrow(() -> new UserNotFoundException("User with id "+id+"doesn't exist")); System.out.println(otherUser.getName()); Set<Connection> connectionsFollowing = currentUser.getUsersFollowing(); System.out.println("connectionsFollowing"); for(Connection con: connectionsFollowing) { if(!con.getIsAccepted() && con.getUserFollowed()==otherUser){ User userinNetwork = con.getUserFollowed();
  • 34. SOCIAL NETWORKING SITE 22102D020145 34 OF 101 System.out.println(userinNetwork.getName()); return ResponseEntity.ok("true"); } } connectionsFollowing = currentUser.getUserFollowedBy(); System.out.println("----"); for(Connection con: connectionsFollowing) { if(!con.getIsAccepted() && con.getUserFollowing()==otherUser){ User userinNetwork = con.getUserFollowing(); System.out.println(userinNetwork.getName()); return ResponseEntity.ok("true"); } } return ResponseEntity.ok("false"); } @CrossOrigin(origins = "*") //@PreAuthorize("hasRole('PROFESSIONAL')") @PutMapping("/in/{id}/new-connection/{newUserId}") public ResponseEntity addToConnections(@PathVariable Long id,@PathVariable Long newUserId) { System.out.println("New connection request:"); User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User with id "+id+"doesn't exist")); userService.newConnection(user,newUserId); System.out.println("New connection added with success!"); return ResponseEntity.ok(""New connection added with success!""); } @CrossOrigin(origins = "*") //@PreAuthorize("hasRole('PROFESSIONAL')") @PutMapping("/in/{id}/notifications/{connectionId}/accept-connection") public ResponseEntity acceptConnection(@PathVariable Long id,@PathVariable Long connectionId) { System.out.println("nnn---------"); User user = userRepository.findById(id).orElseThrow(() -> new UserNotFoundException("User with id "+id+"doesn't exist")); System.out.println(user.getName() + " will accept connection id"+ connectionId);
  • 35. SOCIAL NETWORKING SITE 22102D020145 35 OF 101 Connection conn = connectionRepository.findById(connectionId).orElseThrow(() -> new UserNotFoundException("Notification with id "+id+"doesn't exist")); conn.setIsAccepted(true); connectionRepository.save(conn); Notification not = notificationRepository.findByConnectionId(connectionId).orElseThrow(() -> new UserNotFoundException("Notification with id "+id+"doesn't exist")); not.setIsShown(true); notificationRepository.save(not); Timestamp timestamp = new Timestamp(System.currentTimeMillis()); SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yyyy:HH.mm.ss"); Chat chat = new Chat(); chat.setTimestamp(new Timestamp(System.currentTimeMillis())); Set<User> users = new HashSet<>(); users.add(user); if(conn.getUserFollowed()!=user) users.add(conn.getUserFollowed()); else if(conn.getUserFollowing()!=user) users.add(conn.getUserFollowing()); chat.setUsers(users); chatRepository.save(chat); System.out.println("nnn"); System.out.println(chat); for(User u: users) { System.out.println(u); System.out.println(u.getChats());} return ResponseEntity.ok(""Connection accepted with success!""); } /* @CrossOrigin(origins = "*") //@PreAuthorize("hasRole('PROFESSIONAL')") @GetMapping("/in/{id}/network/users/{userShownId}") public UserProfileDTO getNetwork(@PathVariable Long id) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); User currentUser = userRepository.findUserByUsername(((org.springframework.security.core.userdetails.User) auth.getPrincipal()).getUsername()); return network; }*/ }
  • 36. SOCIAL NETWORKING SITE 22102D020145 36 OF 101 VSWorkSpaceState { "ExpandedNodes": [ "" ], "PreviewInSolutionExplorer": false } admin-nav.component #mylogo{ padding-right: 8px; } .btn:focus,.btn:active { outline: none !important; box-shadow: none; } .navbar{ background-color: rgb(255, 255, 255); } .navbar-nav .nav-link{ font-size: 18px; } #set-btn{ color: #262626; text-decoration: none; } /* Color of the links BEFORE scroll */ .navbar-scroll .nav-link, .navbar-scroll .navbar-toggler-icon, .navbar-scroll .navbar-brand { color: #262626; } /* Color of the navbar BEFORE scroll */ .navbar-scroll { background-color: #FFC017; } /* Color of the links AFTER scroll */
  • 37. SOCIAL NETWORKING SITE 22102D020145 37 OF 101 .navbar-scrolled .nav-link, .navbar-scrolled .navbar-toggler-icon, .navbar-scroll .navbar-brand { color: #262626; } /* Color of the navbar AFTER scroll */ .navbar-scrolled { background-color: #fff; } /* An optional height of the navbar AFTER scroll */ .navbar.navbar-scroll.navbar-scrolled { padding-top: auto; padding-bottom: auto; } .search-area input { background-color:#e4f2fd; color:white; border: 0; } .logout-btn{ background-color: #158eff; color:white; border: 0; } .logout-btn:hover{ background-color: #0078e9; } .users-btn{ background-color: #004b91; color:white; border: 0; } .users-btn:hover{ background-color: #01417e; } admin.component .more-btn:focus,.more-btn:active { outline: none !important;
  • 38. SOCIAL NETWORKING SITE 22102D020145 38 OF 101 box-shadow: none !important; border-color: none; } .container{ font-family: sans-serif; } .btn-download{ color: white; border-color: #004b91; background-color: #004b91; } .btn-download:hover{ background-color: #01417e; } error.component div{ text-align: center; margin-top: 5vh; } feed.component #feedcards{ margin-top: 8%; width: 100%; } #profileCard{ width: 80%; font-family: 'Helvetica'; } #networkCard{ width: 80%; font-family: 'Helvetica'; margin-top:5%; } #diversCard { margin-left: 20%; }
  • 39. SOCIAL NETWORKING SITE 22102D020145 39 OF 101 #profile-image{ width: 50%; border-radius: 50%; margin-top: 5%; } #allPosts{ margin-bottom: 15%; /* padding-left: 2%; */ } .profile-btn{ background-color: #158eff; color: white; } #postCard{ background-color: white; } Footer.component .footer { position:fixed; bottom: 0; width: 100%; background-color: #158eff; color: white; text-align: center; font-size: 10pt; overflow: hidden; z-index: 2; } @media screen and (max-height: 450px) { .footer { display: none; } } Jobs #jobCards{
  • 40. SOCIAL NETWORKING SITE 22102D020145 40 OF 101 margin-top: 8%; width: 100%; } .job-btn{ background-color: #158eff; color: white; text-align: center; margin-top: 30px; width: 30%; border:none; font-size: 18px; } .applicant{ -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 15px; font-size: large; padding: 5px; color: white; background-color: rgb(13, 175, 100) ; font-size: 1.1em; display: inline-flex; text-decoration: none; cursor: pointer; } ul { list-style: none; } #applicants li{ display: inline-flex; margin-right: 10px; margin-top: 10px; } #applicants li span{ text-decoration: none; } Messaging .container{
  • 41. SOCIAL NETWORKING SITE 22102D020145 41 OF 101 margin-top: 6%; padding-bottom: 2%; } img{ max-width:100%;} .inbox_people { background: #f8f8f8 none repeat scroll 0 0; float: left; overflow: hidden; width: 40%; border-right:1px solid #c4c4c4; } .inbox_msg { border: 1px solid #c4c4c4; clear: both; overflow: hidden; } .top_spac{ margin: 20px 0 0;} .recent_heading {float: left; width:40%;} .srch_bar { display: inline-block; text-align: right; width: 60%; } .headind_srch{ padding:10px 29px 10px 20px; overflow:hidden; border-bottom:1px solid #c4c4c4;} .recent_heading h4 { color: #158eff; font-size: 21px; margin: auto; } /* .srch_bar input{ border:1px solid #cdcdcd; border-width:0 0 1px 0; width:80%; padding:2px 0 4px 6px; background:none;} .srch_bar .input-group-addon button { background: rgba(0, 0, 0, 0) none repeat scroll 0 0; border: medium none; padding: 0; color: #707070; font-size: 18px; } .srch_bar .input-group-addon { margin: 0 0 0 -27px;} */ .chat_ib h5{ font-size:15px; color:#464646; margin:0 0 8px 0; }
  • 42. SOCIAL NETWORKING SITE 22102D020145 42 OF 101 .chat_ib h5 span{ font-size:13px; float:right; } .chat_ib p{ font-size:14px; color:#989898; margin:auto; position: relative; /* float:right; */ display: inline-block; position: relative; } .chat_img { float: left; width: 11%; } .chat_ib { float: left; padding: 0 0 0 15px; width: 88%; } .chat_people{ overflow:hidden; clear:both;} .chat_list { border-bottom: 1px solid #c4c4c4; margin: 0; padding: 18px 16px 10px; cursor: pointer; } .inbox_chat { height: 550px; overflow-y: scroll;} .active_chat{ background:#ebebeb;} .incoming_msg_img { display: inline-block; width: 6%; } .received_msg { display: inline-block; padding: 0 0 0 10px; vertical-align: top; width: 92%; } .received_withd_msg p { background: #ebebeb none repeat scroll 0 0; border-radius: 3px;
  • 43. SOCIAL NETWORKING SITE 22102D020145 43 OF 101 color: #646464; font-size: 14px; margin: 0; padding: 5px 10px 5px 12px; width: 100%; } .time_date { color: #747474; display: block; font-size: 12px; margin: 8px 0 0; } .received_withd_msg { width: 57%;} .mesgs { float: left; padding: 30px 15px 0 25px; width: 60%; } .sent_msg p { background: #158eff none repeat scroll 0 0; border-radius: 3px; font-size: 14px; margin: 0; color:#fff; padding: 5px 10px 5px 12px; width:100%; } .outgoing_msg{ overflow:hidden; margin:26px 0 26px;} .sent_msg { float: right; width: 46%; } .input_msg_write input { background: rgba(0, 0, 0, 0) none repeat scroll 0 0; border: 0; color: #4c4c4c; font-size: 15px; min-height: 48px; width: 100%; } .type_msg { border-top: 1px solid #c4c4c4; position: relative; margin-bottom: 2%; } .msg_send_btn { background: #158eff none repeat scroll 0 0;
  • 44. SOCIAL NETWORKING SITE 22102D020145 44 OF 101 border: medium none; border-radius: 50%; color: #fff; cursor: pointer; font-size: 17px; height: 33px; position: absolute; right: 0; top: 11px; width: 33px; margin-right: 5px; margin-top: 2px; } .messaging { padding: 0 0 0 0; /* height: max-content; */ } .msg_history { height: 516px; overflow-y: auto; display: flex; flex-direction: column-reverse; } .input_msg_write input:focus, .input_msg_write input:active{ border: 0; outline: none; } .input_msg_write input{ -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 15px; background-color:white; margin-top: 5px; padding-left: 10px; } navbar.component #mylogo{ padding-right: 8px; } .btn:focus,.btn:active { outline: none !important; box-shadow: none; }
  • 45. SOCIAL NETWORKING SITE 22102D020145 45 OF 101 .navbar{ background-color: rgb(255, 255, 255); } .navbar-nav .nav-link{ font-size: 18px; } #set-btn{ color: #262626; text-decoration: none; } /* Color of the links BEFORE scroll */ .navbar-scroll .nav-link, .navbar-scroll .navbar-toggler-icon, .navbar-scroll .navbar-brand { color: #262626; } /* Color of the navbar BEFORE scroll */ .navbar-scroll { background-color: #FFC017; } /* Color of the links AFTER scroll */ .navbar-scrolled .nav-link, .navbar-scrolled .navbar-toggler-icon, .navbar-scroll .navbar-brand { color: #262626; } /* Color of the navbar AFTER scroll */ .navbar-scrolled { background-color: #fff; } /* An optional height of the navbar AFTER scroll */ .navbar.navbar-scroll.navbar-scrolled { padding-top: auto; padding-bottom: auto; } .search-area input { background-color:#e4f2fd; color:white; border: 0; }
  • 46. SOCIAL NETWORKING SITE 22102D020145 46 OF 101 network.component .search-bar { width: 400px; display: flex; flex-grow: 1; justify-content: center; /* z-index: -1; */ } .input-group.search-box { align-content: center; } .form-control.search { height: 50px; outline: none !important; box-shadow: none; } .search-bar .input-group { width: 100%; } .search-area:focus,.search-area:active { outline: none !important; box-shadow: none !important; border-color: none; } .search-button { height: 50px; background-color: #158eff; outline: none !important; box-shadow: none; border: none; } .btn.search-button:hover, .btn.search-button:active { background-color: #158eff; border-color: inherit; -webkit-box-shadow: none; outline: none !important; box-shadow: none; border: none; } .btn.search-button:disabled {
  • 47. SOCIAL NETWORKING SITE 22102D020145 47 OF 101 background-color: #158eff; border-color: inherit; -webkit-box-shadow: none; box-shadow: none; border: none; } Postsinfeed.component .text-post{ -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 10px; background-color:rgb(240, 240, 240); } .text-post:focus,.text-post:active { outline: none !important; box-shadow: none !important; border-color: none; } .posts { /* padding-top: 40px; */ background-color:transparent; /* margin-bottom: 50px; */ border-color: none; border: none; } .card { /* border: none; */ background-color:rgb(255, 255, 255); width: 100%; margin-bottom: 10%; /* border-radius: 0%; */ border-color: rgb(224, 224, 224); border-width: 2px; } .card-body { width:100%; /* padding: 0%; */ position: relative; }
  • 48. SOCIAL NETWORKING SITE 22102D020145 48 OF 101 .container { /* margin-bottom: 10px; */ border: none; } .stretch-card>.card { width: 100%; min-width: 100% } .flex { -webkit-box-flex: 1; -ms-flex: 1 1 auto; flex: 1 1 auto } @media (max-width:991.98px) { .padding { padding: 1.5rem } } @media (max-width:767.98px) { .padding { padding: 1rem } } .padding { padding: 3rem } .box-widget { border: none; position: relative } .box { position: relative; /* border-radius: 3px; */ background: #ffffff; /* border-top: 3px solid #d2d6de; */ /* margin-bottom: 30px; */ width: 100%; border: none; /* box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1) */ }
  • 49. SOCIAL NETWORKING SITE 22102D020145 49 OF 101 .box-header.with-border { border-bottom: 3px solid #f4f4f4 } .box-header { color: #444; display: block; padding: 10px; position: relative } .user-block img { width: 40px; height: 40px; float: left } .img-circle { border-radius: 50% } .user-block .username { font-size: 16px; font-weight: 600 } .username a { text-decoration: none } .user-block .username, .user-block .description, .user-block .comment { display: block; float: left; /* margin-left: 50px */ } .user-block .description { float: left; color: #999; font-size: 13px; } .user-block .username, .user-block .description, .user-block .comment { margin-left: 20px;
  • 50. SOCIAL NETWORKING SITE 22102D020145 50 OF 101 display: block; } .user-block:after { clear: both } .user-block:before, .user-block:after { content: ""; display: table } .box-body .content { padding: 5px; } .box-header>.box-tools { position: absolute; right: 10px; top: 5px } .box-header>.box-tools [data-toggle="tooltip"] { position: relative } .btn { border-radius: 3px; -webkit-box-shadow: none; box-shadow: none; border: 1px solid transparent } .btn-box-tool { padding: 5px; font-size: 12px; background: transparent; color: #97a0b3 } .box-header:after, .box-body:after, .box-footer:after { clear: both } .box-body {
  • 51. SOCIAL NETWORKING SITE 22102D020145 51 OF 101 border: none; /* padding: 10px */ } .pad { padding: 10px } .img-responsive, .thumbnail a>img, .thumbnail>img { display: block; max-width: 100%; height: auto } p { margin: 0 0 10px } .btn-default { background-color: #f4f4f4; color: #444; border-color: #ddd } .btn { border-radius: 3px; -webkit-box-shadow: none; box-shadow: none; border: 1px solid transparent } .btn-group-xs>.btn, .btn-xs { padding: 1px 5px; font-size: 12px; line-height: 1.5; border-radius: 3px } .btn-default { color: #333; background-color: #fff; border-color: #ccc } .pull-right {
  • 52. SOCIAL NETWORKING SITE 22102D020145 52 OF 101 float: right !important } .text-muted { color: #777; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.42857143; color: #333; background-color: #fff } .box-comments { background: #f7f7f7 } .box-footer { border-top-left-radius: 0; border-top-right-radius: 0; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; border-top: 1px solid #f4f4f4; padding: 10px } .box-comments .box-comment:first-of-type { padding-top: 0 } .box-comments .box-comment { padding: 8px 0; border-bottom: 1px solid #eee } .box-comments .box-comment:before, .box-comments .box-comment:after { content: ""; display: table } .img-sm, .box-comments .box-comment img, .user-block.user-block-sm img { width: 30px !important; height: 30px !important } .img-sm,
  • 53. SOCIAL NETWORKING SITE 22102D020145 53 OF 101 .img-md, .img-lg, .box-comments .box-comment img, .user-block.user-block-sm img { float: left } .box-comments .comment-text { margin-left: 40px; color: #555 } .box-comments .username { color: #444; display: block; font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif; overflow-x: hidden; overflow-y: auto } .box-comments .text-muted { font-weight: 400; font-size: 12px; background-color: #f7f7f7 } .box-footer { /* border-top-left-radius: 0; border-top-right-radius: 0; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; border-top: 1px solid #f4f4f4; */ padding: 10px } .box-header:before, .box-body:before, .box-footer:before, .box-header:after, .box-body:after, .box-footer:after { content: ""; display: table } .img-sm, .box-comments .box-comment img, .user-block.user-block-sm img {
  • 54. SOCIAL NETWORKING SITE 22102D020145 54 OF 101 width: 30px !important; height: 30px !important } .img-sm { float: left } .img-sm+.img-push { margin-left: 40px } } }, "free": [ "brands" ] }, "jira": { "changes": [ "5.6.0" ], "ligatures": [], "search": { "terms": [ "atlassian" ] }, "styles": [ "brands" ], "unicode": "f7b1", "label": "Jira", "voted": true, "svg": { "brands": { "last_modified": 1546440861000, "raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm- 241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z"/></svg>", "viewBox": [ "0", "0", "496", "512" ],
  • 55. SOCIAL NETWORKING SITE 22102D020145 55 OF 101 "width": 496, "height": 512, "path": "M490 241.7C417.1 169 320.6 71.8 248.5 0 83 164.9 6 241.7 6 241.7c-7.9 7.9-7.9 20.7 0 28.7C138.8 402.7 67.8 331.9 248.5 512c379.4-378 15.7-16.7 241.5-241.7 8-7.9 8-20.7 0-28.6zm- 241.5 90l-76-75.7 76-75.7 76 75.7-76 75.7z" } }, "free": [ "brands" ] }, "joget": { "changes": [ "5.0.0" ], "ligatures": [], "search": { "terms": [] }, "styles": [ "brands" ], "unicode": "f3b7", "label": "Joget", "voted": false, "svg": { "brands": { "last_modified": 1548363722332, "raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-110.4 101.5- 182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2-67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8-58.5-48.2s51.1- 40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c-8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7-24.9-.5-179.3-3.6- 230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6-31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z"/></svg>", "viewBox": [ "0", "0", "496", "512" ], "width": 496, "height": 512, "path": "M378.1 45C337.6 19.9 292.6 8 248.2 8 165 8 83.8 49.9 36.9 125.9c-71.9 116.6-35.6 269.3 81 341.2s269.3 35.6 341.2-80.9c71.9-116.6 35.6-269.4-81-341.2zm51.8 323.2c-40.4 65.5-
  • 56. SOCIAL NETWORKING SITE 22102D020145 56 OF 101 110.4 101.5-182 101.5-6.8 0-13.6-.4-20.4-1-9-13.6-19.9-33.3-23.7-42.4-5.7-13.7-27.2-45.6 31.2- 67.1 51.7-19.1 176.7-16.5 208.8-17.6-4 9-8.6 17.9-13.9 26.6zm-200.8-86.3c-55.5-1.4-81.7-20.8- 58.5-48.2s51.1-40.7 68.9-51.2c17.9-10.5 27.3-33.7-23.6-29.7C87.3 161.5 48.6 252.1 37.6 293c- 8.8-49.7-.1-102.7 28.5-149.1C128 43.4 259.6 12.2 360.1 74.1c74.8 46.1 111.2 130.9 99.3 212.7- 24.9-.5-179.3-3.6-230.3-4.9zm183.8-54.8c-22.7-6-57 11.3-86.7 27.2-29.7 15.8-31.1 8.2-31.1 8.2s40.2-28.1 50.7-34.5 31.9-14 13.4-24.6c-3.2-1.8-6.7-2.7-10.4-2.7-17.8 0-41.5 18.7-67.5 35.6- 31.5 20.5-65.3 31.3-65.3 31.3l169.5-1.6 46.5-23.4s3.6-9.5-19.1-15.5z" } }, "free": [ "brands" ] }, "joint": { "changes": [ "5.1.0" ], "ligatures": [], "search": { "terms": [ "blunt", "cannabis", "doobie", "drugs", "marijuana", "roach", "smoke", "smoking", "spliff" ] }, "styles": [ "solid" ], "unicode": "f595", "label": "Joint", "voted": false, "svg": { "solid": { "last_modified": 1628088635559, "raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42- 3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2- 37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h- 48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-
  • 57. SOCIAL NETWORKING SITE 22102D020145 57 OF 101 162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z"/></svg>", "viewBox": [ "0", "0", "640", "512" ], "width": 640, "height": 512, "path": "M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0- 4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28- 16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v- 30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68- 22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24- 24V376c0-13.26-10.75-24-24-24z" } }, "free": [ "solid" ] }, "joomla": { "changes": [ "4.1", "5.0.0" ], "ligatures": [], "search": { "terms": [] }, "styles": [ "brands" ], "unicode": "f1aa", "label": "Joomla Logo", "voted": false, "svg": { "brands": { "last_modified": 1546440861000, "raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l-44.3
  • 58. SOCIAL NETWORKING SITE 22102D020145 58 OF 101 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2-49.7- 49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2- 31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2- 32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9- 12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8- 14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3- 26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z"/></svg>", "viewBox": [ "0", "0", "448", "512" ], "width": 448, "height": 512, "path": "M.6 92.1C.6 58.8 27.4 32 60.4 32c30 0 54.5 21.9 59.2 50.2 32.6-7.6 67.1.6 96.5 30l- 44.3 44.3c-20.5-20.5-42.6-16.3-55.4-3.5-14.3 14.3-14.3 37.9 0 52.2l99.5 99.5-44 44.3c-87.7-87.2- 49.7-49.7-99.8-99.7-26.8-26.5-35-64.8-24.8-98.9C20.4 144.6.6 120.7.6 92.1zm129.5 116.4l44.3 44.3c10-10 89.7-89.7 99.7-99.8 14.3-14.3 37.6-14.3 51.9 0 12.8 12.8 17 35-3.5 55.4l44 44.3c31.2- 31.2 38.5-67.6 28.9-101.2 29.2-4.1 51.9-29.2 51.9-59.5 0-33.2-26.8-60.1-59.8-60.1-30.3 0-55.4 22.5-59.5 51.6-33.8-9.9-71.7-1.5-98.3 25.1-18.3 19.1-71.1 71.5-99.6 99.9zm266.3 152.2c8.2- 32.7-.9-68.5-26.3-93.9-11.8-12.2 5 4.7-99.5-99.7l-44.3 44.3 99.7 99.7c14.3 14.3 14.3 37.6 0 51.9- 12.8 12.8-35 17-55.4-3.5l-44 44.3c27.6 30.2 68 38.8 102.7 28 5.5 27.4 29.7 48.1 58.9 48.1 33 0 59.8-26.8 59.8-60.1 0-30.2-22.5-55-51.6-59.1zm-84.3-53.1l-44-44.3c-87 86.4-50.4 50.4-99.7 99.8- 14.3 14.3-37.6 14.3-51.9 0-13.1-13.4-16.9-35.3 3.2-55.4l-44-44.3c-30.2 30.2-38 65.2-29.5 98.3- 26.7 6-46.2 29.9-46.2 58.2C0 453.2 26.8 480 59.8 480c28.6 0 52.5-19.8 58.6-46.7 32.7 8.2 68.5-.6 94.2-26 32.1-32 12.2-12.4 99.5-99.7z" } }, "free": [ "brands" ] }, "journal-whills": { "changes": [ "5.3.0", "5.11.0" ], "ligatures": [], "search": { "terms": [ "book", "force", "jedi",
  • 59. SOCIAL NETWORKING SITE 22102D020145 59 OF 101 "sith", "star wars", "yoda" ] }, "styles": [ "solid" ], "unicode": "f66a", "label": "Journal of the Whills", "voted": false, "svg": { "solid": { "last_modified": 1628088635560, "raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M438.40625,377.59375c-3.20313,12.8125- 3.20313,57.60937,0,73.60937Q447.9922,460.78907,448,470.40625v16c0,16-12.79688,25.59375- 25.59375,25.59375H96c-54.40625,0-96-41.59375-96- 96V96C0,41.59375,41.59375,0,96,0H422.40625C438.40625,0,448,9.59375,448,25.59375v332.812 5Q448,372.79688,438.40625,377.59375ZM380.79688,384H96c-16,0-32,12.79688- 32,32s12.79688,32,32,32H380.79688ZM128.01562,176.01562c0,.51563.14063.98438.14063,1.5l3 7.10937,32.46876A7.99954,7.99954,0,0,1,160,224h-.01562a9.17678,9.17678,0,0,1-5.25- 1.98438L131.14062,201.375C142.6875,250.95312,186.90625,288,240,288s97.3125- 37.04688,108.875-86.625l-23.59375,20.64062a8.02516,8.02516,0,0,1- 5.26563,1.96876H320a9.14641,9.14641,0,0,1-6.01562- 2.71876A9.26508,9.26508,0,0,1,312,216a9.097,9.097,0,0,1,2.73438-6.01562l37.10937- 32.46876c.01563-.53124.15625-1,.15625-1.51562,0-11.04688-2.09375-21.51562-5.06251- 31.59375l-21.26562,21.25a8.00467,8.00467,0,0,1-11.32812-11.3125l26.42187- 26.40625a111.81517,111.81517,0,0,0-46.35937-49.26562,63.02336,63.02336,0,0,1- 14.0625,82.64062A55.83846,55.83846,0,0,1,251.625,254.73438l-1.42188- 34.28126,12.67188,8.625a3.967,3.967,0,0,0,2.25.6875,3.98059,3.98059,0,0,0,3.43749-6.03124l- 8.53124-14.3125,17.90625-3.71876a4.00647,4.00647,0,0,0,0-7.84374l-17.90625-3.71876,8.53124- 14.3125a3.98059,3.98059,0,0,0-3.43749-6.03124,4.726,4.726,0,0,0- 2.25.67187L248.6875,184.125,244,71.82812a4.00386,4.00386,0,0,0-8,0l-4.625,110.8125-12- 8.15624a4.003,4.003,0,0,0- 5.68751,5.35937l8.53126,14.3125L204.3125,197.875a3.99686,3.99686,0,0,0,0,7.82812l17.90625,3 .73438- 8.53126,14.29688a4.72469,4.72469,0,0,0-.56249,2.04687,4.59547,4.59547,0,0,0,1.25,2.90625,4.01 059,4.01059,0,0,0,2.75,1.09375,4.09016,4.09016,0,0,0,2.25-.6875l10.35937- 7.04687L228.375,254.76562a55.86414,55.86414,0,0,1-28.71875- 93.45312,63.01119,63.01119,0,0,1-14.04688-82.65625,111.93158,111.93158,0,0,0- 46.375,49.26563l26.42187,26.42187a7.99917,7.99917,0,0,1-11.3125,11.3125l-21.26563- 21.26563C130.09375,154.48438,128,164.95312,128.01562,176.01562Z"/></svg>", "viewBox": [ "0", "0", "448", "512"
  • 60. SOCIAL NETWORKING SITE 22102D020145 60 OF 101 ], "width": 448, "height": 512, "path": "M438.40625,377.59375c-3.20313,12.8125- 3.20313,57.60937,0,73.60937Q447.9922,460.78907,448,470.40625v16c0,16-12.79688,25.59375- 25.59375,25.59375H96c-54.40625,0-96-41.59375-96- 96V96C0,41.59375,41.59375,0,96,0H422.40625C438.40625,0,448,9.59375,448,25.59375v332.812 5Q448,372.79688,438.40625,377.59375ZM380.79688,384H96c-16,0-32,12.79688- 32,32s12.79688,32,32,32H380.79688ZM128.01562,176.01562c0,.51563.14063.98438.14063,1.5l3 7.10937,32.46876A7.99954,7.99954,0,0,1,160,224h-.01562a9.17678,9.17678,0,0,1-5.25- 1.98438L131.14062,201.375C142.6875,250.95312,186.90625,288,240,288s97.3125- 37.04688,108.875-86.625l-23.59375,20.64062a8.02516,8.02516,0,0,1- 5.26563,1.96876H320a9.14641,9.14641,0,0,1-6.01562- 2.71876A9.26508,9.26508,0,0,1,312,216a9.097,9.097,0,0,1,2.73438-6.01562l37.10937- 32.46876c.01563-.53124.15625-1,.15625-1.51562,0-11.04688-2.09375-21.51562-5.06251- 31.59375l-21.26562,21.25a8.00467,8.00467,0,0,1-11.32812-11.3125l26.42187- 26.40625a111.81517,111.81517,0,0,0-46.35937-49.26562,63.02336,63.02336,0,0,1- 14.0625,82.64062A55.83846,55.83846,0,0,1,251.625,254.73438l-1.42188- 34.28126,12.67188,8.625a3.967,3.967,0,0,0,2.25.6875,3.98059,3.98059,0,0,0,3.43749-6.03124l- 8.53124-14.3125,17.90625-3.71876a4.00647,4.00647,0,0,0,0-7.84374l-17.90625-3.71876,8.53124- 14.3125a3.98059,3.98059,0,0,0-3.43749-6.03124,4.726,4.726,0,0,0- 2.25.67187L248.6875,184.125,244,71.82812a4.00386,4.00386,0,0,0-8,0l-4.625,110.8125-12- 8.15624a4.003,4.003,0,0,0- 5.68751,5.35937l8.53126,14.3125L204.3125,197.875a3.99686,3.99686,0,0,0,0,7.82812l17.90625,3 .73438- 8.53126,14.29688a4.72469,4.72469,0,0,0-.56249,2.04687,4.59547,4.59547,0,0,0,1.25,2.90625,4.01 059,4.01059,0,0,0,2.75,1.09375,4.09016,4.09016,0,0,0,2.25-.6875l10.35937- 7.04687L228.375,254.76562a55.86414,55.86414,0,0,1-28.71875- 93.45312,63.01119,63.01119,0,0,1-14.04688-82.65625,111.93158,111.93158,0,0,0- 46.375,49.26563l26.42187,26.42187a7.99917,7.99917,0,0,1-11.3125,11.3125l-21.26563- 21.26563C130.09375,154.48438,128,164.95312,128.01562,176.01562Z" } }, "free": [ "solid" ] }, "js": { "changes": [ "5.0.0" ], "ligatures": [], "search": { "terms": [] }, "styles": [ "brands" ],
  • 61. SOCIAL NETWORKING SITE 22102D020145 61 OF 101 "unicode": "f3b8", "label": "JavaScript (JS)", "voted": false, "svg": { "brands": { "last_modified": 1546440861001, "raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3- 20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4- 19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"/></svg>", "viewBox": [ "0", "0", "448", "512" ], "width": 448, "height": 512, "path": "M0 32v448h448V32H0zm243.8 349.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4- 63.2-38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6- 26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z" } }, "free": [ "brands" ] }, "js-square": { "changes": [ "5.0.0", "5.0.3" ], "ligatures": [], "search": { "terms": [] }, "styles": [ "brands" ], "unicode": "f3b9", "label": "JavaScript (JS) Square",
  • 62. SOCIAL NETWORKING SITE 22102D020145 62 OF 101 "voted": false, "svg": { "brands": { "last_modified": 1546440861000, "raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0- 26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2-38.5l34.3- 20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0-14.4-11.4- 19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z"/></svg>", "viewBox": [ "0", "0", "448", "512" ], "width": 448, "height": 512, "path": "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48- 48V80c0-26.5-21.5-48-48-48zM243.8 381.4c0 43.6-25.6 63.5-62.9 63.5-33.7 0-53.2-17.4-63.2- 38.5l34.3-20.7c6.6 11.7 12.6 21.6 27.1 21.6 13.8 0 22.6-5.4 22.6-26.5V237.7h42.1v143.7zm99.6 63.5c-39.1 0-64.4-18.6-76.7-43l34.3-19.8c9 14.7 20.8 25.6 41.5 25.6 17.4 0 28.6-8.7 28.6-20.8 0- 14.4-11.4-19.5-30.7-28l-10.5-4.5c-30.4-12.9-50.5-29.2-50.5-63.5 0-31.6 24.1-55.6 61.6-55.6 26.8 0 46 9.3 59.8 33.7L368 290c-7.2-12.9-15-18-27.1-18-12.3 0-20.1 7.8-20.1 18 0 12.6 7.8 17.7 25.9 25.6l10.5 4.5c35.8 15.3 55.9 31 55.9 66.2 0 37.8-29.8 58.6-69.7 58.6z" } }, "free": [ "brands" ] }, "jsfiddle": { "changes": [ "4.1", "5.0.0" ], "ligatures": [], "search": { "terms": [] }, "styles": [ "brands" ], "unicode": "f1cc", "label": "jsFiddle", "voted": false,
  • 63. SOCIAL NETWORKING SITE 22102D020145 63 OF 101 "svg": { "brands": { "last_modified": 1546440861001, "raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097- 49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903- 3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737- 36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065- 41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074- 11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65- 56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766- 95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096- 23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545- 44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184- 5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84- 35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823- 17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z"/></svg>", "viewBox": [ "0", "0", "576", "512" ], "width": 576, "height": 512, "path": "M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539- 33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369- 65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167- 25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992- 56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212- 87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253- 71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332- 76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505- 11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095- 16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056- 14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-
  • 64. SOCIAL NETWORKING SITE 22102D020145 64 OF 101 9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271- 28.214 31.429 11.714 49.108 44.366 42.76 78.186z" } }, "free": [ "brands" ] }, "kaaba": { "changes": [ "5.3.0" ], "ligatures": [], "search": { "terms": [ "building", "cube", "islam", "muslim" ] }, "styles": [ "solid" ], "unicode": "f66b", "label": "Kaaba", "voted": false, "svg": { "solid": { "last_modified": 1628088635560, "raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006 32.006 0 0 0 0 113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77-8.81-26-21.88- 30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12 53.8a95.937 95.937 0 0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l-274.2-82.26c-9.04-2.72- 18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80 21.82C37.02 261.03 32 257.2 32 251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm144- 39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11-2.44-10.11-7.72v-16.58c0-3.61 2.41- 6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm176 22.7c0-5.28 5.02-9.11 10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-80- 21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28 5.02-9.11 10.11-7.72l96 26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96-26.18a7.997 7.997 0 0 1- 5.89-7.72v-16.58z"/></svg>", "viewBox": [
  • 65. SOCIAL NETWORKING SITE 22102D020145 65 OF 101 "0", "0", "576", "512" ], "width": 576, "height": 512, "path": "M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006 32.006 0 0 0 0 113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77- 8.81-26-21.88-30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12 53.8a95.937 95.937 0 0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l- 274.2-82.26c-9.04-2.72-18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80 21.82C37.02 261.03 32 257.2 32 251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm144-39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11- 2.44-10.11-7.72v-16.58c0-3.61 2.41-6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm176 22.7c0-5.28 5.02-9.11 10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-80-21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28 5.02-9.11 10.11-7.72l96 26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96- 26.18a7.997 7.997 0 0 1-5.89-7.72v-16.58z" } }, "free": [ "solid" ] }, "kaggle": { "changes": [ "5.2.0", "5.8.0" ], "ligatures": [], "search": { "terms": [] }, "styles": [ "brands" ], "unicode": "f5fa", "label": "Kaggle", "voted": true, "svg": { "brands": { "last_modified": 1558987775901, "raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path d="M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8-10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v- 109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z"/></svg>", "viewBox": [
  • 66. SOCIAL NETWORKING SITE 22102D020145 66 OF 101 "0", "0", "320", "512" ], "width": 320, "height": 512, "path": "M304.2 501.5L158.4 320.3 298.2 185c2.6-2.7 1.7-10.5-5.3-10.5h-69.2c-3.5 0-7 1.8- 10.5 5.3L80.9 313.5V7.5q0-7.5-7.5-7.5H21.5Q14 0 14 7.5v497q0 7.5 7.5 7.5h51.9q7.5 0 7.5-7.5v- 109l30.8-29.3 110.5 140.6c3 3.5 6.5 5.3 10.5 5.3h66.9q5.25 0 6-3z" } }, "free": [ "brands" ] }, "key": { "changes": [ "1", "5.0.0", "5.10.1" ], "ligatures": [], "search": { "terms": [ "lock", "password", "private", "secret", "unlock" ] }, "styles": [ "solid" ], "unicode": "f084", "label": "key", "voted": false, "svg": { "solid": { "last_modified": 1628088635561, "raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255- 10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029- 16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49- 48-48-48-48 21.49-48 48z"/></svg>",
  • 67. SOCIAL NETWORKING SITE 22102D020145 67 OF 101 "viewBox": [ "0", "0", "512", "512" ], "width": 512, "height": 512, "path": "M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827- 3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h- 40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48- 48-21.49-48-48-48-48 21.49-48 48z" } }, "free": [ "solid" ] }, "keybase": { "changes": [ "5.0.11", "5.8.0", "5.10.2", "5.11.0" ], "ligatures": [], "search": { "terms": [] }, "styles": [ "brands" ], "unicode": "f4f5", "label": "Keybase", "voted": true, "svg": { "brands": { "last_modified": 1568817883851, "raw": "<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M286.17 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18zm111.92-147.6c-9.5-14.62-39.37-52.45- 87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0-47.88-104.13c-12.41-4.1-23.33-6-32.41- 5.77-.6-2-1.89-11 9.4-35L198.66 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0- 8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93.54a214 214 0 0 0-46.29 35.54C14 304.66 14 374 14 429.77v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21- 1.87 10-6.92 3.75-20.11a178.29 178.29 0 0 1-15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4