Git Product home page Git Product logo

portaler-core's Introduction

NO SUPPORT

I will no longer be providing support for this in any way. There are enough forks and communities spawned from this that you can find help there. I don't know where they all exist or have information on them as I have not played Albion in 2yrs (as of October 2022).

I am totally out of the loop. Please do not email me, as I will not be able to help you in any way.

ARCHIVED

This repo is not actively maintained.

If you would like to continue development or deploying this, feel free to fork it.

How to fork a repo.

Thank you all for your support.


Portaler has been moved to community development

Portaler logo

An Albion Online Avalonian Roads shared mapping tool

discord

Contents

What it is

Portaler is a mapping tool for Avalonian Roads in Albion Online, that provides real time private data to your guild or alliance. It is fully Albion TOS compliant, because every user action is completely manual and nothing is automatically pulled or scraped from the Albion client or network packets. This tool simply provides a clean way for guilds/alliances share roads mapping internally.

The data we use to populate information is collected from Albion Data Project.

Screenshot

Running

There is a full Self-hosting Guide here, but a simple version can be found below.

If you would like to run the project on your own server, we provide DockerHub images and you can find a docker-compose.yml file in the docker folder. If you would like to just run the project, you do not need to build the docker files contained in the ./docker folder, just simply update the .env.example file with your variables, the variables in the docker-compose.yml and run:

docker-compose up -d

To setup your .env files with keys, follow the Github Token instructions here and the Discord instructions here.

Links to our DockerHub images:

Development

Click here for Development Setup

portaler-core's People

Contributors

brettkorp avatar dependabot[bot] avatar fastfox2 avatar logoffski avatar mawburn avatar mmcken3 avatar tebro avatar willwh avatar zenion avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

portaler-core's Issues

Move heartbeat to websockets

Currently we use a simple heartbeat to hit the server and retrieve the current map. We should be using websockets to send events to clients on change.

Remove CircleCI config & use Github Actions

We don't really need the CircleCI dependency and can use the CircleCI action to publish to Docker.

Something like this should be all we need for the different pieces. I don't know off the top of my head how to add the version number to instead of just :latest but I'm sure that would be something easy to figure out.

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Login to DockerHub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Build and push
        id: docker_build
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: mawburn/portaler:latest
      - name: Image digest
        run: echo ${{ steps.docker_build.outputs.digest }}

https://docs.github.com/en/actions/quickstart

Move types into common type folder

So, I wasn't really thinking when I created the project and created the types as a package for some reason.

https://github.com/Portaler-Zone/portaler-core/tree/main/shared/types

This isn't necessary at all. We should just have a /types folder at the root and store our types in there then import that into the root tsconfig.json file.

This should be very easy to do, we just need to delete the types package, uninstall it from the projects, and add the new types folder.

Build Failed with Error codes.

Build FAILED.

"C:\Users\Bioleve\Documents\GitHub\portaler-core\node_modules\node-sass\build\binding.sln" (default target) (1) ->
(_src_\libsass target) ->
  MSBUILD : error MSB3428: Could not load the Visual C++ component "VCBuild.exe". To fix this, 1) install the .NET Framework 2.0 SDK, 2) install Microsoft Visual Studio 2005 or 3) add the location of the component to the system path if it is installed elsewhere.  [C:\Users\Bioleve\Documents\GitHub\portaler-core\node_modules\node-sass\build\binding.sln]

    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:00.51
gyp ERR! build error
gyp ERR! stack Error: `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onExit (C:\Users\Bioleve\Documents\GitHub\portaler-core\node_modules\node-gyp\lib\build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (node:events:329:20)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:277:12)
gyp ERR! System Windows_NT 10.0.18363
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\Bioleve\\Documents\\GitHub\\portaler-core\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd C:\Users\Bioleve\Documents\GitHub\portaler-core\node_modules\node-sass
gyp ERR! node -v v15.2.0
gyp ERR! node-gyp -v v3.8.0

I am on Windows 10, any information I can provide to help you just ask.

Missing Hideout zones

So I copied your zones.js file, and was comparing them to ones that we had in a spreadsheet with map images ( From testing server and when roads began). I wasn't sure if they were still in the game until I tried to Map Secent-Qinsom but it wasnt in Portaler

These are ones missing:
Qiient-Nusas
Qiient-Nusom
Qiient-Odetis
Qiient-Odetum
Qiient-Qinsis
Qiient-Tersas
Qiient-Tertum
Qiient-Viesis
Qiient-Vynsis
Qiitun-Vynsom
Quaent-Nusis
Secent-Odesis
Secent-Qinsas
Secent-Qinsom
Secent-Tersum
Sectun-Odesis
Sectun-Vyntis
Setent-Qinsum
Settun-Nusis
Settun-Odeitum

Create a "lock" feature to keep the map from shifting on updates

When a user is looking at the map and a connection dies or someone updates the map, the entire thing can shift and it's hard to find where you were at.

We should implement a lock to stop this from happening.

This would be a good first issue for someone comfortable with TS/React.

Logs to see who created / deleted Connections

It would be really helpful, especially in the initial setup, to be able to see who created/deleted(/modified) which connection. That would also be good to indentify trolls (but hopefully you don't have any that have access). For this to be resolved we would need a admin role that can view the logs, because I don't think everyone should be able to see the logs. Furthermore we would propbably need changes in api (or somewhere else in the backend) and of course, in the frontend.

Edit: Just saw that this is a duplicate.

Move Connections back to Radio

Originally I had Radios and I thought it was bad design, so I moved it to buttons. Turns out, people hate this. I haven't had the time to move it back. The code should be in the history, so this shouldn't be a difficult task.

Currently we have this:

Screen Shot 2021-08-08 at 7 33 48 PM

We need to move back to this:

Screen Shot 2021-08-08 at 7 34 51 PM

(except keeping the royal connections)

Improve dev setup docs

For those who may not be very familiar with yarn there are some basics missing from the devsetup.md.

Suggestions

  • I like the Mats information, maybe add what type of chests and dungeons in zone
  • if the connections that don't connect to set home after a portal disappears , it removes the chain. ( turn on/off incase the person wants to map more than just their connections ). Another is an option to select and delete paths.
  • I like to move connections so that they start from the direction the portal platform is from hide out, a way to set that would be nice. ( When a connection closes it will move the placement of the roads , would be a nice way to lock it down)
    Before Portal Closes:
    image
    After Portal Closes:
    image

Choose & Implement a GraphDB

We need to choose either Neo4j or ArangoDB and move the permanent connections table to it.

My thought is to use ArangoDB, but this also needs to be added to the docker-compose as well. I attempted Neo4j once, but had a lot of issues moving it into a container, but I could have just went down a weird path so I wouldn't necessarily count it out, but ArangoDB looks much easier.

A GraphDB makes sense because the map is exactly the data model a GraphDB creates. Using one would allow us to do a lot of things right out of the box, like natively find routes, and keep royal connections alive #58 by walking the graph when doing cleanup, as well as solving #53 by allowing multiple connections to the same node.

We need to make sure weight is a consideration when making this change.

Create Read-Only Role

Create a Read-Only role for a server, where users can see the map but not edit it. This is a highly requested feature.

I started working on this in #48, but it's a PitA to test and devlope because of the bot.

multiple connections

Today I had a case where there was two connections between the same two clusters, one with size 2, another with 7, with different timers, but I wasn't able to register them both (one defined later overwrote the first one). I think there should be support for multiple connections between nodes.

Allow multiple sessions

So, authentication is just kinda thrown together but it's secure and it works. But, it doesn't allow a user to sign on to multiple devices.

We should allow that. Which should just be an update the way we store it in the Redis at it's easiest, an expiring JWT that can be shared at the most advanced.

Create a Rally Point

We should give the ability to create a rally point that would do something to the map for a node (zone) that would show it different to users.

The rally point probably doesn't need to be stored in the DB and could just exist in Redis only.

The rally point also needs to die after 24hrs or if you wanna get fancy, when the known connections die. This could be done with a simple TTL on the Redis cache.

chests tier info

It seems that chests have constant tier, so it would be nice to show that tier info in the info tab.

error Command failed with exit code 1.

C:\WINDOWS\system32>yarn
yarn install v1.22.5
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
warning " > [email protected]" has unmet peer dependency "[email protected]".
warning " > [email protected]" has unmet peer dependency "[email protected] || 4.x".
warning " > [email protected]" has unmet peer dependency "[email protected]".
warning " > [email protected]" has incorrect peer dependency "[email protected] || 2.x".
warning " > [email protected]" has incorrect peer dependency "eslint@^7.0.0".
warning " > [email protected]" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".
[4/4] Building fresh packages...
Done in 1.44s.

C:\WINDOWS\system32>yarn dev:front
yarn run v1.22.5
$ cd packages/frontend && yarn start
O sistema não pode encontrar o caminho especificado.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

I downloaded your zip and dragged the package.json to system32, is that right?

I have yan and node installed, I also did yan upgrade.

image

Sorry I amm reading guides and learning how to use Yan and etc so I am a bit lost here.

I tried the go mod download and it says no modules specified, so I tried adding docker-compose up -d db and it says its not a know dependency.

@mawburn

Clean Up Models

In /shared we have the package called @portaler/data-models, which makes things easier when working with the ETL and API server, but we also have things split into the API because of laziness.

We also have logic in the routes themselves to split things between the Redis cache and DB, which is bad and most of which should be done in the data-models opaquely.

This is a good issue for a little more experienced developer.

Add User Log

We need to add a way for people to see a log for the server they are on. There's not really any good reason to hide this just for admins or people like that.

A basic query would be something like:

SELECT
  u.discord_name,
  u.discord_discriminator,
  ul.user_action,
  ul.details,
  ul.created_on
FROM user_logs ul
JOIN users u ON ul.user_id = u.id
WHERE ul.server_id = $1
  AND ul.user_action <> 'login'
ORDER BY ul.created_on DESC

With maybe a limit of the last 1000 logs, with the ability to paginate past that.

There needs to be a backend endpoint for this as well as a frontend display for this. Probably some kind of sortable table.

The column for ul.details is stored in JSON, so it should be pretty easy to build an endpoint for this.

Falied to compile

Hey, i set up everythink like in the guide but i got a error while entering the page, can u help me guys?

image

corrupted dungeon not tracking Chests. V3.7.1.15575

I have run about 15 corrupted dungeons since I update to V3.7.1.15575. none of the chests have been tracked.

in Hellgate, the Fame shrine is being tracked

in solo Dungeons, the combat buffs are being tracked but not the chests.

I have not tested group dungeon

Store User Settings on Server

Need to create a table, the user settings could just be a JSONB object.

We only have 1 setting now, which is the user's home.

User being inserted in database, but user_roles and user_servers no

Hi!

I'm trying to self hosting in an VPS.
I followed the steps on https://github.com/Portaler-Zone/portaler-core/blob/main/docs/selfhosting.md docs.

I got sucessfully made the app run, the bot joined my server and created "portaler" role, I also have added my subdomain using the admin api.

When I try to login I dont receive the subdomain error anymore, so I guess my configurations its okay... But I'm receving token=/invalid.

I checked in code and this happen when portaler select user from database but no user is returned.

Then I logged in in psql console and used some querys to test. Thats strange cause when I try to login portaler its inserting my user in table users, table servers is inserted too:

image

But tables user_servers and user_roles have nothing:

image

In my api logs don't have any error anymore. When I try to login I dont receive no errors, just token=invalid in my redirect url.

Maybe thats an permission issue? My bot already have the role manager permission, I'm sure of that cause he created portaler role in my server.

My discord bot is configured like:

image

I know that bot need this configs to list all ppl in discord guild, so I already activated it (even that is not in docs).

I dont know more configurations to do. I was trying to edit code to put some debugs but I dont know how to put my edited code in docker container so I come here.

Does anyone know any reason for this problem? Thanks

Add Intel to Zone

Servers should be able to add intel to a zone in freeform text. This could probably be done in markdown, but we don't really need a full markdown editor.

We would just store this in a new table which would look something like:

CREATE TABLE IF NOT EXISTS server_intel (
  id serial PRIMARY KEY,
  server_id INT NOT NULL,
  zone_id INT NOT NULL,
  intel TEXT,
  is_active BOOLEAN NOT NULL DEFAULT false,
  updated_by INT NOT NULL,
  created_on TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);

Where we would only have 1 entry shown per zone and every modification would just create a new history. If we wanted to go the extra mile, we could probably include a history of edits as well.

Fully Parse XML Documents in the ETL

Currently we only pull from the world.json in broderickhyman/ao-bin-dumps and use that to populate our database.

However, within this file each entry contains a link to an .xml file, that can lead you down a rabbit hole of basically all the information there is to find about a zone. Such as mobs, chest tiers, crafting tiers, refine rates, etc.

This would close issues like #55, but Intel in #61 could serve as an interim solution for that. However, both are needed.

Add Unit Tests

So... we have no tests. Well, I think we have one. That's bad. We need tests.

This is a ticket that will probably live in TODO for a long time, even if we get a lot of contributor support. Jest is what we should be using and they should be in TS.


Edits:

Homepage doesn't need unit tests at all. It's just a Gatsby page.

For the rest of the stuff, see the comments below on how to best structure them.

The Bot is getting redesigned to use the API in #48 (if I ever finish it), so we can probably skip that for now.

Move from Subdomains to Path based

Currently we use subdomains for servers, instead of path based routing. We should move to path based routing for multiple reasons.

  1. It would allow us to create a method for users to sign up for themselves, because we don't have to interface with Cloudflare.
  2. It would allow us to add advertising to the pages.
  3. It would probably allow us to merge servers easier, so multiple servers could use the same map. (this requires more thought)

Make Self Hosting Easier

We have a pretty good tutorial for self hosting by @ImmortalBrain, but we could make it easier by providing docker-compose.yml files that are drag and drop and maybe supporting a single a way to merge services into a single Docker container, which I had once, but dropped because I wasn't keeping it up to date and juggling keys became hard.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.