geesome-node 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
geesome-node 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
geesome-node 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 Readme
开发语言 C#
操作系统 跨平台
软件类型 开源软件
所属分类 大数据数据存储
开源组织
地区 不详
投 递 者 首席测试
适用人群 未知
收录时间 2021-11-30

软件简介

geesome

File Storage and Social Media Node

Current state: 0.2.0 - Alpha

opened issues closed issues closed PR opened PR


Contributions Welcome Join Us On Telegram

GeeSome Node

GeeSome Node allows you to run your own file storage with social media functional: make you own public or private group with posts and content. It's a Node on top of IPFS for define and manage data structure of files, users and groups. Node provides a UI for storing and accessing your saved data or remote data of other nodes: files, posts, groups.

GeeSome Main Page

About GeeSome Project

GeeSome protocol created to provide communication tool between communities of property owners in Galt Project.

Galt Project team is aware of many cases of censorship and blocking in different social networks. These cases forced us to develop a new decentralized protocol and node application that would allow anyone to upload any content to his personal node and to share this content with the whole world without the risk of being blocked.

Using the GeeSome protocol, communities in the Galt Project will be able to communicate in encrypted chat groups, share images, video, text or any data.

We are sure that this tool should be used not only by the project's communities, but also by anyone who is concerned about the safety of their data, censorship and blocking in web.

GeeSome Protocol

A new open protocol for unstopable social networking and communication on IPFS. It defines the structure of social network data to describe familiar to the modern user entities: content, posts, tags, groups.

GeeSome UI

GeeSome UI - it's Vue application, that using GeeSome node API for saving content and IPFS in-browser node for getting content. It's completly separated client from node and can be connected to any other GeeSome node. There are also many cases when it’s not necessary to use GeeSome UI. You can use GeeSome node API and GeesomeClient class in your projects for build you own UI with some important for you functions.

Summary

With the help of GeeSome Node, anyone can create an instance of a decentralized social network, with groups like in YouTube, Instagram or Telegram but with content preservation and no locks or censorship thanks to the concept of personal GeeSome Node using IPFS Node to store content, access data and receive updates by libp2p.

GeeSome Node can be used:

  • to create and maintain your blog
  • to save important content like Saved messages in telegrams and / or in the form of a file structure as in Google Drive
  • as a media platform for adding and viewing / listening to audio and video content, creating playlists
  • to share the uploaded content in any form (blog, playlist, file, folder)
  • to create chat groups

GeeSome Scheme

GeeSome-Scheme

You can run personal or public GeeSome node. It used for storing files, manage entities and prepare content for publishing. Also because of IPNS updates issues - GeeSome node have IPNS caching based on signed PubSub events. Also there is an issue about IPNS keys of user. Currently its storing in GeeSome node, but need to improve it.

UI Screenshots

File explorer

GeeSome File explorer

Test group

GeeSome Test Group

Encrypted personal chat

GeeSome Personal Chat

Mobile version

Main page Menu Groups list Group page
GeeSome Mobile UI GeeSome Mobile UI GeeSome Mobile UI GeeSome Mobile UI

Install with domain to your server

  1. Set DNS settings for domain: ip address of server
  2. Clone repo to server that bound to domain
git clone https://github.com/galtproject/geesome-node.git && cd geesome-node
  1. Run script with parameters: domain and email for letsencrypt
sudo chmod +x bash/*.sh && sudo bash/ubuntu-install-docker.sh
sudo bash/ubuntu-install-nginx.sh 

Recommend actions after install:

sudo bash/ubuntu-init-swapfile.sh # Init 2GB Swapfile
PORT=4242 bash/ubuntu-set-ssh-port.sh # Change SSH port to custom
  1. Open your-site.com/#/setup and create first admin user

Getting started with GeeSome Node API

  1. Install GeeSome libs by npm:
npm i --save git://github.com/galtproject/geesome-libs.git

or yarn:

yarn add git://github.com/galtproject/geesome-libs.git
  1. Checkout GeeSome API documentation

  2. Get apiKey from node by api and login pass authorization:

const { GeesomeClient } = require('geesome-libs/src/GeesomeClient');

const geesomeClient = new GeesomeClient({
    server: 'https://your-site.com:7722', // or 'http://localhost:7711',
    // apiKey: '4J1VYKW-ZP34Y0W-PREH1Q2-DYN9Q8E' // if you paste your apiKey here, so no need to authorization by loginPassword function
});

geesomeClient.init().then(async () => {
    await geesomeClient.loginPassword("username", "password");
    console.log('Congrats! You successfully authorized, your session api key:', geesomeClient.apiKey);
});

Or you can generate apiKey from UI in User Profile section by "Add api key" button. More safer to use apiKey instead of login/password, because you can always disable it and create another if there is a leak.

  1. Init GeeSome client and save image to your IPFS node
geesomeClient.init().then(async () => {
    const contentObj = await geesomeClient.saveDataByUrl('https://picsum.photos/500/300.jpg');
    console.log('content ipfs', contentObj.storageId);
    console.log('content manifest ipld', contentObj.manifestStorageId);
});
  1. Create group and publish post via API
geesomeClient.init().then(async () => {
    const avatarPhoto = await geesomeClient.saveDataByUrl('https://picsum.photos/500/300.jpg');
    
    const group = await geesomeClient.createGroup(testUser.id, { name: 'test', title: 'Test', avatarImageId: avatarPhoto.id });

    const groupIpns = group.manifestStaticStorageId;
    console.log('group manifest ipld', group.manifestStorageId);
    console.log('group manifest ipns that points to ipld', groupIpns);
    
    const postContent1 = await geesomeClient.saveContentData('My first post');
    const postContent2 = await geesomeClient.saveDataByUrl('https://picsum.photos/1000/500.jpg');
    
    await geesomeClient.createPost([postContent1.id, postContent2.id], { groupId: group.id, status: 'published' });
    
    // get published group from IPFS with posts
    
    // resolve IPNS first
    const updatedGroupIpld = await geesomeClient.resolveIpns(groupIpns);
    console.log('new group manifest ipld with first post', updatedGroupIpld);
    
    // get JSON content of group by IPLD
    const updatedGroupManifest = await geesomeClient.getObject(updatedGroupIpld);
    console.log('fetched group manifest', updatedGroupManifest);
    // or you can simply use geesomeClient.getGroup(groupIpns) for auto-resolve IPNS, get manifest with avatar and cover contents included
    
    // get posts one by one from group's posts tree
    geesomeClient.getGroupPostsAsync(
      updatedGroupIpld, 
      {limit: 10, offset: 0, orderDir: 'desc'}, 
      function onItemCallback(fetchedPost) {
        console.log('fetchedPost', fetchedPost);
        console.log('fetchedPost contents array', fetchedPost.contents);
      }, 
      function onFinishCallback(postList) {
        console.log('postList', postList);
      }
    );
});
  1. Create and publish IPFS site directory with content to IPNS
geesomeClient.init().then(async () => {
    await geesomeClient.saveDataByUrl('https://picsum.photos/500/300.jpg', {path: '/my-site/image.jpg'});
    
    await geesomeClient.saveContentData('<h1>Hello world!</h1> <img src="./image.jpg"/>', {path: '/my-site/index.html'});
    
    const mySiteFolder = await geesomeClient.getFileCatalogItemByPath('/my-site/', 'folder');
    
    const {storageId, staticId} = await geesomeClient.publishFolder(mySiteFolder.id);
    
    console.log(`check out by IPFS hash: ${geesomeClient.server}/ipfs/${storageId}/`); // for example: https://your-site.com:7722/ipfs/QmbDxAcbnSc5bgX77MgqqZ9bPVcczv5McZAYrWXoRxExi8/

    console.log(`check out by IPNS hash: ${geesomeClient.server}/ipns/${staticId}/`); // for example: https://your-site.com:7722/ipns/QmcqRcmu7p3UHkMPz8XJ886KPWbzxgpc9uNXy9GUDfUD87/
    
    // resolve IPNS by api:
    const resolvedStorageId = await geesomeClient.resolveIpns(staticId);
    
    console.log(storageId === resolvedStorageId); // true
});

Current state and features:

  • Encrypted personal messages
  • Public channels and posts
  • Streamable media api(video and audio)
  • Basic file manager
  • User profile
  • Api keys for access to all node features
  • Api keys managment in UI
  • Separated content and folders list and access by users
  • Users upload limits
  • IPNS caching for fast resolving
  • IPFS and IPNS directories for HTML sites and more
  • Ethereum authentication by signature

TODO:

  • Share folder by ipld, ipns manifest
  • Play audio and video content in groups as playlist
  • Public chat groups
  • Private chat groups
  • Feed for aggregate channels, chats, personal messages like in Telegram
  • Local IPNS accounts (in-browser) and signing authentication or publish transactions
  • PubSub communication with modules
  • Auto-backup shared groups and folders to another node
  • Auto-backup social networks channels(Telegram, YouTube, Instagram)

GeeSome Modules

You can develop your own GeeSome module in any programming language for extend GeeSome node functional by communication by API with api keys. Module can communicate with GeeSome node by http requests and PubSub events(in future) for uploading content, managing users and groups.

Existing modules:

  • GeeSome ETH Manager: Ethereum listener library for managing GeeSome node by Smart Contracts events: register users, set storage limits.

Minimal requirements

  • System: Ubuntu 16.04
  • 2 GB RAM
  • 1 GB free HDD + space for your files

Dependencies

  • GO IPFS or IPFS JS
  • Node 14.x
  • Postgres 9.5
  • ffmpeg
  • Cerbot(Letsencrypt)

Local install and run

bash/ubuntu-install-deps.sh # if not ubuntu - execute commands manually for your OS
npm i -g yarn # install if not installed
yarn
npm rebuild youtube-dl
npm run start

In another terminal tab:

cd frontend && yarn
npm run local

Open UI page by url: http://localhost:8081/

Api available by http://localhost:7711 endpoint.

Links

Articles

  • How to make the internet great again
  • Signing and encrypt messages by IPNS keys (Soon...)
  • How to add site to IPFS with GeeSome node (Soon...)
  • Use GeeSome as IPFS file storage in your decentralized project (Soon...)
  • IPNS updates problem and how we solved it (Soon...)
  • Are we ready for true decentralized messages and content? (Soon...)
  • We need backups for our Social Neworks! (Soon...)

Do you like the project?

Put a star and fork it. Join Us On Telegram. Thank you!

展开阅读全文

代码

评论

点击引领话题📣 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
Google Chrome 信息泄露漏洞
授权机制缺失
Google Chrome是美国谷歌(Google)公司的一款Web浏览器。 Google chrome存在信息泄露漏洞,目前尚无此漏洞的更多信息,请随时关注CNNVD或厂商公告.
CVE-2021-37976 MPS-2021-28733
2022-08-08 20:40
Google Chrome service workers安全绕过漏洞
Google Chrome是美国谷歌(Google)公司的一款Web浏览器。Google chrome存在安全漏洞,该漏洞源于网络系统或产品的代码开发过程中存在设计或实现不当的问题。远程攻击者可利用漏洞绕过安全限制。
CVE-2021-38010 MPS-2021-28767
2022-08-08 20:40
yargs-parser 输入验证错误漏洞
输入验证不恰当
yargs-parser是一款选项解析器。 yargs-parser 13.1.2之前版本、14.0.0及之后版本(15.0.1版本已修复)和16.0.0及之后版本(18.1.1版本已修复)中存在输入验证错误漏洞。攻击者可借助‘__proto__’payload利用该漏洞添加或修改Object.prototype属性。
CVE-2020-7608 MPS-2020-4006
2022-08-08 20:40
OpenJS Electron 安全漏洞
对外部实体的文件或目录可访问
OpenJS Electron是OpenJS基金会的一款用于桌面GUI应用程序开发的开源框架。 OpenJS Electron 7.2.4之前版本、8.2.4之前版本和9.0.0-beta21之前版本中存在安全漏洞。攻击者可利用该漏洞读取任意本地文件。
CVE-2020-4075 MPS-2020-9911
2022-08-08 20:40
Google Chrome 缓冲区错误漏洞
跨界内存写
Google Chrome是美国谷歌(Google)公司的一款Web浏览器。 Google Chrome 86.0.4240.198之前版本存在缓冲区错误漏洞,该漏洞源于V8组件中一个不适当的实现安全问题。
CVE-2020-16013 MPS-2021-0125
2022-08-08 20:40
Google Chrome资源管理错误漏洞
UAF
Google Chrome是美国谷歌(Google)公司的一款Web浏览器。 Google Chrome91.0.4472.164之前资源管理错误漏洞,远程攻击者可利用该漏洞通过精心制作的HTML页面造成堆损坏。
CVE-2021-30560 MPS-2021-11553
2022-08-08 20:40
Google Chrome 安全特征问题漏洞
源验证错误
Google Chrome是美国谷歌(Google)公司的一款Web浏览器。 Google Chrome 中存在安全特征问题漏洞,该漏洞源于产品的Blink不恰当的实现。
CVE-2021-30630 MPS-2021-23400
2022-08-08 20:40
Google Chrome 安全漏洞
Google Chrome是美国谷歌(Google)公司的一款Web浏览器。 Google chrome 87.0.4280.66之前版本存在安全漏洞,该漏洞源于网络中的策略执行不足。
CVE-2020-16022 MPS-2021-0138
2022-08-08 20:40
Google Chrome沙箱实现不当漏洞
Chrome是由Google开发的一款Web浏览工具。                                                Google Chrome 94.0.4606.81之前版本存在沙箱实现不当漏洞。攻击者可利用该漏洞潜在地通过 Windows绕过站点隔离。
CVE-2021-37980 MPS-2021-28737
2022-08-08 20:40
Google Chrome cache安全绕过漏洞
将资源暴露给错误范围
Google Chrome是美国谷歌(Google)公司的一款Web浏览器。Google chrome存在安全漏洞,攻击者可利用漏洞绕过安全限制。
CVE-2021-38009 MPS-2021-28766
2022-08-08 20:40
@hapi/statehood 存在ReDoS漏洞
ReDoS
@hapi/statehood 是一个 HTTP 状态管理实用程序包。由于不正确的正则表达式使用,此软件包的受影响版本容易通过 cookie 解析器受到正则表达式拒绝服务 (ReDoS) 的攻击。
MPS-2022-13743
2022-08-08 20:40
Google Chrome信息泄露漏洞
将资源暴露给错误范围
Google Chrome是美国谷歌(Google)公司的一款Web浏览器。Google Chrome存在信息泄露漏洞,攻击者可利用该漏洞通过精心制作的HTML页面泄露跨域数据。
CVE-2022-0806 MPS-2022-5583
2022-08-08 20:40
Google Chrome 安全漏洞
Google Chrome是美国谷歌(Google)公司的一款Web浏览器。 Google Chrome 存在安全漏洞,该漏洞源于浏览器中文件系统API的策略执行不足,远程攻击者可以通过精心制作的HTML页面绕过文件系统限制。
CVE-2021-21172 MPS-2021-2722
2022-08-08 20:40
Engine.IO 代码问题漏洞
对因果或异常条件的不恰当检查
Engine.Io是一个 Socket.Io 的基于传输的跨浏览器/跨设备双向通信层的实现。 Engine.IO 中存在代码问题漏洞,该漏洞源于产品未对特殊HTTP请求引发的异常进行有效处理。攻击者可通过该漏洞导致异常并关闭nodejs引擎。
CVE-2022-21676 MPS-2021-37034
2022-08-08 20:40
Google Chrome安全特征问题漏洞
Google Chrome是美国谷歌(Google)公司的一款Web浏览器。Google Chrome存在安全特征问题漏洞,该漏洞源于产品的Compositing功能不正确的实现。远程攻击者可利用该漏洞可以创建一个特别设计的网页,欺骗受害者访问它并获得敏感信息。
CVE-2022-0116 MPS-2022-0483
2022-08-08 20:40
electron 存在不安全的缺省变量初始化漏洞
不安全的缺省变量初始化
electron 是一个框架,可让您使用 JavaScript、HTML 和 CSS 编写跨平台桌面应用程序。由于 nodeIntegration 和 webviewTag 的默认值在用户未定义时设置为 true,因此该软件包的受影响版本容易受到任意代码执行的影响,因为 Node 在 web 视图中启用。
MPS-2022-13644
2022-08-08 20:40
simple-get 信息泄露漏洞
信息暴露
Simple-Get是美国的一个使 Http 获取请求的最简单方法。 simple-get 存在信息泄露漏洞,该漏洞源于在NPM中暴露敏感信息给未经授权的参与者。
CVE-2022-0355 MPS-2022-2533
2022-08-08 20:40
Google Chrome Media组件缓冲区错误漏洞
跨界内存写
Google Chrome是美国谷歌(Google)公司的一款Web浏览器。Media是其中的一个多媒体组件。 Google Chrome 80.0.3987.162之前版本中的Media组件存在缓冲区错误漏洞,该漏洞源于不正确的边界检查。远程攻击者可借助特制网站利用该漏洞在系统上执行任意代码,或导致应用程序崩溃。
CVE-2020-6452 MPS-2020-5384
2022-08-08 20:40
Google Chrome 安全漏洞
Google Chrome是美国谷歌(Google)公司的一款Web浏览器。 Google chrome 87.0.4280.66之前版本存在安全漏洞,该漏洞源于PPAPI。
CVE-2020-16014 MPS-2021-0126
2022-08-08 20:40
Google Chrome 资源管理错误漏洞
UAF
Google Chrome是美国谷歌(Google)公司的一款Web浏览器。 Google Google 88.0.4324.96版本之前存在资源管理错误漏洞,该漏洞源于程序Blink组件中发现了使用后免费安全问题。
CVE-2021-21122 MPS-2021-1391
2022-08-08 20:40
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
0 评论
0 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部